使用new关键字调用函数(new ClassA(…))的具体步骤:
1. 创建空对象;
var obj = {};
2. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象;
obj._ proto_ = ClassA.prototype;
3. 使用新对象调用函数,函数中的this被指向新实例对象:
ClassA.call(obj); //{}.构造函数();
4. 将初始化完毕的新对象地址,保存到等号左边的变量中
注意:若构造函数中返回this或返回值是基本类型(number、string、boolean、null、undefined)的值,则返回新实例对象;若返回值是引用类型的值,则实际返回值为这个引用类型。
1 function Person(name, age) { 2 this.name = name; 3 this.age = age; 4 } 5 var person = new Person("Alice", 23);
new一个对象的四个过程:
1、创建一个空对象
2、让Person中的this
指向obj,并执行Person的函数体
3、设置原型链,将obj的__proto__
成员指向了Person函数对象的prototype
成员对象
4、判断Person的返回值类型,如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。