js高级-构造函数与原型

1.工厂模式

由于ES中无法创建类,,开发人员便开发了一种函数,用函数来封装创建对象的细节。

2.构造函数
    1. 构造函数是用来创建对象的,本质上也是函数,构造函数和普通函数的唯一区别,在于调用方式不同。不存在定义构造函数的特殊语法。任何函数只要通过关键字new来调用,那它就可以作为构造函数。
    1. 将构造函数当作普通函数调用时(即没有使用new关键字),其中的属性和方法被绑定到了windows对象上。(在全局作用域中调用一个函数时,this对象总是指向global对象,浏览器中就是windows对象)

构造函数的缺点:
每个方法都要在每个实例上重新创建一遍,占用内存。不同实例上的同名函数是不相等的。

构造函数模式:
没有显示创建对象;
属性和方法赋值给了this对象;
没有return返回语句
使用new关键字调用
构造函数名首字母大写

3.原型

每一个函数都有一个prototype(原型)属性,这个属性指向一个对象,即原型对象。原型对象包含了所有实例共享的属性和方法。

理解原型对象:
只要我们创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。默认情况,所有原型对象自动获得一个constructor(构造函数)属性,这个属性指向prototype所在的函数。eg:Persion.prototype.constructor又指向了Persion
每一个对象实例都有一个内部属性__proto__属性,该属性与构造函数没有直接关系,它指向了原型对象(该属性在火狐,safari和chrome支持,其他方式不可见)

4.组合使用构造函数和原型模式

构造函数模式用于定义实例属性,原型模式用于定义方法和共享属性。

原文地址:https://www.cnblogs.com/tingshu/p/15216711.html