创建对象

构造函数;字面量法;
创建对象的方法:
详细的了解这几种的方法;

  • 1:工厂模式;抽离了创建对象的具体过程;考虑ECMAScript中无法创建类;开发人员就发明一种函数;用函数来封装以特定的接口创建对象的细节;工厂模式虽然解决了对个类似对象的创建;但是未能解决对象的识别问题(这里提到了对象的识别问题;对象的类型);
  • 2:构造函数模式:
    通过new 生产构造函数,没有显示的去创建一个对象;而是通过将属性存贮在这个函数的作用域中;也就是this;没有return;通过使用new的时候;做了一下四步;首先就是创建一个新的对象;将构造函数的作用域赋值给新的对象;接下来执行构造函数的代码;然后返回新的对象;记住每一次的new就是创建了一个新的对象;也就是从新创建了一个函数;封装性比较差;其实构造函数中的函数就是封装好方法;但是同样创建了好对全局性的函数;这样封装性和继承就毫无意义了;
  • 3:原型模式;

我们创建的每一个函数都存在一个prototype的属性;这个属性是一个指针;指向一个对象;说有的属性就会共享这个对象说包含的方法和属性;


创建对象_第1张图片
image.png

首先说重写的解决方案;首先你肯定是通过new的方式构建一个实例;将公用的方法就行存放在原型中;仅仅对自己的属性就行统一命名就行这样就能就行重写;因为使用的时候;就是当代码就行执行到相应的对象的时候;就会首先检查这个实例是否据用你在使用属性;如果没有再往原型中找;话句话说就是在实例中命名某个属性的时候;这个属性就会屏蔽原型中的同名属性;通过使用delete就行关系的恢复;

创建对象_第2张图片
image.png

要判断他们的关系就是通过hasOwnProperty以及in操作符;确定该属性是来之实例还是原型对象;

重写原型会切断之前的原型联系;重点关注;

原型模式中的创建和实例中的继承完全是不相同的两种操作;自己理解错误了;
原型模式出项的问题就是在在

在其中一个实例操作原型的某个属性的其他的也会相应受到影响;这也是为什么很少单独使用原型模式进行创建的原因;

  • 4:组合使用构造函数和原型模式;
    创建自定义类型的最常见的方式就是就是组合使用构造函数模式和原型模式;构造函数用来定义实例的属性;而原型对象用于定义方法和共享的属性;结果是每个实列都有自己的一份实例属性的副本;
创建对象_第3张图片
image.png
  • 5:动态原型模式
    将说有的属性都封装到构造函数里面;而通过构造函数初始化原型(仅在必要的情况下);换句话说就是判定某个存在的方法是否有效来创建决定是都创建该方法;


    创建对象_第4张图片
    image.png
  • 6:寄生构造函数模式


    创建对象_第5张图片
    image.png

    创建对象_第6张图片
    image.png

    创建对象_第7张图片
    image.png

    创建对象_第8张图片
    image.png
  • 7:稳妥构造函数模式


你可能感兴趣的:(创建对象)