new关键字具体做了什么?
发布网友
发布时间:2023-03-26 03:58
我来回答
共1个回答
热心网友
时间:2023-10-20 12:51
用 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();