1.new关键字原理实现

109 阅读1分钟

思考:new操作符干了什么?

  1. 创建一个新对象。
  2. 创建的对象将被[[Prototype]]链接到这个函数的prototype对象上。
  3. 使this指向新创建的对象。
  4. 返回该中间对象,即返回实例对象
function New() {
  let Foo = Array.prototype.shift.call(arguments);//获取函数,arguments长度减一
  let res = Object.create(Foo.prototype);//创建新对象,并且链接Foo.prototype
  let result = Foo.apply(res,arguments);//执行构造函数,改变this指向
  // 确保 new 出来的是个对象 返回的值是什么就return什么
  return typeof result === 'object' ? result : res;
}

function Person(name,age) {
  this.name = name;
  this.age = age;
  this.getName = function () {
    return this.name;
  }
}

let obj1 = New(Person,'jack',18)
let obj2 = new Person('jack',18)

console.log(obj1);
console.log(obj2);