美文网首页
实现new操作符

实现new操作符

作者: 小杰66 | 来源:发表于2021-04-01 09:54 被阅读0次
    function myNew(con, ...args) {
      var obj = {};
      Object.setPrototypeOf(obj, con.prototype);
      var result = con.apply(obj, args);
      return result instanceof Object ? result : obj;
    }
    
    function Person(name) {
      this.name = name;
    }
    Person.prototype.getName = function () {
      console.log(this.name);
    };
    
    let p = myNew(Person, "xj");
    console.log(p.name);
    p.getName();
    

    1.首先函数接受不定量的参数,第一个参数为构造函数,接下来的参数被构造函数使用
    2.然后内部创建一个空对象 obj
    3.因为 obj 对象需要访问到构造函数原型链上的属性,所以我们通过 setPrototypeOf 将两者联系起来。这段代码等同于 obj.proto = Con.prototype
    4.将 obj 绑定到构造函数上,并且传入剩余的参数
    5.判断构造函数返回值是否为对象,如果为对象就使用构造函数返回的值,否则使用 obj,这样就实现了忽略构造函数返回的原始值

    相关文章

      网友评论

          本文标题:实现new操作符

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