美文网首页
new关键字具体做了什么?

new关键字具体做了什么?

作者: 三号男嘉宾 | 来源:发表于2017-07-10 14:51 被阅读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();

    相关文章

      网友评论

          本文标题:new关键字具体做了什么?

          本文链接:https://www.haomeiwen.com/subject/auoyhxtx.html