美文网首页
JS中new的原理及实现

JS中new的原理及实现

作者: 脸滚键盘已成书 | 来源:发表于2020-02-21 11:14 被阅读0次

    在调用new的过程中做了四件事:

    1.新生成对象

    2.链接到原型

    3.绑定this

    4.返回新对象

    接下来就针对这几点,实现类似new的方法

    
    //定义create方法
    
    function create(){
    
    //定义空对象
    
    let obj = {};
    
    //取出参数列表的第一个参数(构造函数)
    
    let Con = [].shift.call(arguments);
    
    //手动指正obj的构造函数为Con(链接原型)
    
    obj.__proto__ = Con.prototype;
    
    //调用Con,改变this为obj,传入剩余参数arguments
    
    let result = Con.apply(obj,arguments);
    
    //考虑到Con函数中有return的原因,需要对result进行判断
    
    return result instanceof Object ? result : obj
    
    }
    
    

    现在便可以通过 create(构造函数,参数)来创建对象

    注:

    1.关于[].shift.call(arguments)

    因为arguments是类数组对象,虽然有length属性,但是没有shift方法,故通过call方法改变执行上下文调用shift方法

    2.关于obj.proto = Con.prototype

    链接原型使用,proto是每个对象拥有的隐藏属性,指向它构造函数的原型,prototype是每个函数(Fuction.prototype除外)拥有的对象,二者关系这里就不赘述了

    相关文章

      网友评论

          本文标题:JS中new的原理及实现

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