zoukankan      html  css  js  c++  java
  • javascript——构造函数模式

    var o = new Array();

    我们创建了一个对象,这个对象是个数组类型,Array就是一个原生构造函数。显而易见,构造函数模式就是让我们知道如果我们要创建一个Person(),如何能使它像Array()一样可以通过new一个类来创建对象实例,且这个对象实例被标记为Person类型

    function Person (name, age, job){
        this.name=name;
        this.age=age;
        this.job=job;
        this.sayName = function(){
            alert(this.name);
        };
    
    }
    var person1= new Person("guoshiwei", 23, "web");
    var person2 = new Person("Nicholas", 29, "Software Engineer");

    这段代码使用构造函数模式,通过构造函数模式创建实例的时候,必须使用new操作符,通过new操作符,实例就被标识为Person类型(构造函数最大的好处)

    注意:

    Person 首字母要大写,因为构建函数模式它本身也是一个函数,为了区别,构建函数模式的函数首字母大写

    通过new创建新实例的过程如下(注释后为个人理解)

    1. 创建一个新对象;        //在内存中开辟一个空间  object类型对象  所有还没有定义的对象都是object对象
    2. 将构造函数的作用域赋给新对象(因此this就指向了这个新对象);//将Person类中的类或方法复制一份放到这个空间中去,此时这个对象变成  Person类型对象  constructor属性指向Person  表明你得到的这些属性和方法来自哪
    3. 执行构造函数中的代码(对这个新对象添加属性);     //把你的参数代入到这个空间的属性或方法中
    4. 返回新对象;    //把这个对象连接到person1上 

    到此为止,一个Person类型的person1对象实例就完成了,但是注意到的是,通过new操作符创建的对象实例,第二步时,我的理解是它是将Person类中的属性和方法复制一份给自己,而不是引用来自Person的属性和方法。(每个属性和方法都是自己的)

    alert (person1.sayName == person2.sayName);   //false

    这就造成了一种不方便(我理解为浪费),那就是每创建一个实例,都要重新生成一个sayName函数。

    function Person (name, age, job){
        this.name=name;
        this.age=age;
        this.job=job;
        this.sayName=sayName;
    }
    function sayName(){
        alert(this.name);
    }
    
    var person1=new Person("guoshiwei", 23,"web");
    var person1=new Person("Nicholas", 29,"Software Engineer");

    你可以这样在函数外创建sayName函数,这样person1和person2都通过sayName对象引用sayName()方法,但是如果你还需要sayAge, sayJob函数就显的比较麻烦了,一旦你需要的方法多了,就得不偿失,而且降低了Person函数的封装性,所以为了解决这个问题,又出现了一种新的模式——原型模式

  • 相关阅读:
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (四) 自动化部署
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (三) 服务观测
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (二) 部署微服务程序
    阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (一) 部署 Nacos
    C++知识点
    libmkl 学习笔记
    基于tesseract-OCR进行中文识别
    poco编译与运行
    Linux下的I/O复用与epoll详解(转载)
    高并发网络编程之epoll详解(转载)
  • 原文地址:https://www.cnblogs.com/guoshiwei/p/4897691.html
Copyright © 2011-2022 走看看