new关键字具体做了什么?

2017-07-10  本文已影响0人  三号男嘉宾

用 var anObject = new aFunction() 形式创建对象的过程实际上可以分为三步:

第一步是建立一个新对象;

第二步将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象;

第三步就是将该对象作为this参数调用构造函数,完成成员设置等初始化工作。

其实javascript的new关键字只不过做了五件事情:

1.创建Object

2.查找class的prototype上的所有方法、属性,复制一份给创建的Object(注意,如果prototype上有属性是function或者数组或者Object,那么只复制指针)

3.将构造函数classA内部的this指向创建的Object

4.创建的Object的__proto__指向class的prototype

5.执行构造函数class

// 定义类 类名字是 classA

functionclassA(){

this.b=1;

}

classA.prototype.b=44;

classA.prototype.show =function(){

alert(this.b);

};

// 用new实例化

varb =newclassA();

b.show();

// 用函数实例化

functionnewClass(cls,args){

varobj = {};

for(varpincls.prototype)

obj[p] = cls.prototype[p];

obj.__proto__ = cls.prototype;

cls.apply(obj,args||[]);

returnobj;

};

vark = newClass(classA);

k.show();

上一篇下一篇

猜你喜欢

热点阅读