new 关键字模拟实现

首先,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 关键字模拟实现)