JavaScript -- new 运算符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wust_cyl/article/details/86524041

开门见山,new 运算符的操作步骤

当代码 new Foo(...) 执行时,会发生以下事情:

  1. 一个继承自 Foo.prototype 的新对象被创建。
  2. 使用指定的参数调用构造函数 Foo ,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。
  3. 由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤

简单模拟一下new 运算符

      function myNew (func) {
          const o = Object.create(func.prototype);
          const k = func.call(o);
          if ( typeof k === "object") return k;
          else return o;
      }

简单验证一下

       function M () {
           this.name = "cyl";
       }
       function F() {
           this.name = "666";
           return {};
       }
      function myNew (func) {
          const o = Object.create(func.prototype);
          const k = func.call(o);
          if ( typeof k === "object") return k;
          else return o;
      }
      const my = myNew(M);
      const f = myNew(F);
      console.log(my);
      console.log(f);

猜你喜欢

转载自blog.csdn.net/wust_cyl/article/details/86524041