js模拟实现new

87 阅读1分钟

JavaScript之模拟实现new

new 分析

  • new可以实例化一个对象
  • 这个对象可以访问构造函数的属性
  • 这个对象可以访问构造函数原型上的属性
  • 对象的__proto__指向构造函数的原型
  • 如果构造函数return回一个对象,那么new操作返回构造函数的return的对象

new 实现

// new可以实例化一个对象
// 这个对象可以访问构造函数的属性
// 这个对象可以访问构造函数原型上的属性
// 对象的__proto__指向构造函数的原型
// 如果构造函数return回一个对象,那么new操作返回构造函数的return的对象

function newFunction() {
  let res = {};
  // 获取第一参数作为构造函数(构造函数)
  let constructor = Array.prototype.shift.call(arguments);
  res.__proto__ = constructor.prototype;
  // 绑定this,并执行构造函数
  let turn = constructor.apply(res, arguments);
  return turn ? turn : res;
}

引用文章