做了什么 创建一个空对象 对象的__proto__指向构造函数的 prototype 改变构造函数的 this 指向,指向 obj 返回这个对象 new 的实现

function A() {}
var a = new A();

做了什么

  1. 创建一个空对象
  2. 对象的__proto__指向构造函数的 prototype
  3. 改变构造函数的 this 指向,指向 obj
  4. 返回这个对象

new 的实现

function myNew(A) {
  // 创建一个空对象
  var obj = Object.create(null);
  // 空对象的__proto__指向构造函数的prototype
  obj.__proto__ = A.prototype;
  // 改变构造函数的this指向,指向obj
  var ret = A.call(obj);
  // 返回这个对象
  return obj;
}

function A() {}
var a = myNew(A);
var _a = new A();
console.log(a);
console.log(_a);

暂无评论