美文网首页
new 关键字模拟实现

new 关键字模拟实现

作者: 菜鸟切图仔 | 来源:发表于2019-03-02 16:13 被阅读0次

    首先,new 是JavaScript用来实例化一个对象的关键字,后边跟着构造函数,例如:

    function Person(name){
      this.name = name;
    }
    Person.prototype.getName = function(){
      console.log(this.name)
    }
    
    var per = new Person("小黑不黑");
    per.getName(); // 小黑不黑
    

    那么,new究竟做了什么事呢?

    1. 新建一个空对象
    2. 空对象的 proto 属性指向构造函数的 prototype
    3. 执行构造函数
    4. 返回这个对象
    模拟代码实现如下
    myNew = function(){
      const instance = Object.create(null);
     // 获取myNew函数传入的第一个参数,即构造函数
      const _constructor = Array.prototype.shift.call(arguments); 
     // 空对象_proto_属性指向构造函数的原型
      instance._proto_ =_ constructor.prototype;
      _constructor.apply(instance,arguments);
      return instance;
    }
    
    // =========================测试==============================
    function Person(name) {
        this.name = name;
    }
    Person.prototype.getName = function () {
        console.log(this.name)
    }
    
    const per = myNew(Person,"小黑不黑");
    const per2 = new Person("小黑不黑");
    console.log(per);
    console.log(per2);
    
    执行结果

    相关文章

      网友评论

          本文标题:new 关键字模拟实现

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