new 关键词到底做了什么

Posted: 09.23.2019

#JS基础 #面试问题 - JS

问题描述

在如下的代码中,其背后运行的原理是什么?

var a = new B();

创建空对象

创建一个空对象 a

var a = {};

继承 prototype

把 a 的 __proto__ 设置成 B 的 prototype

a.__proto__ = B.prototype;

调用构造函数

调用 B's constructor,并主动让 this 指向 a

B.call(a);
// 等同于: B.prototype.constructor.call(a);

整体来看

function B () {
  this.name = 'lynch';
}

// var a = new B();
var a = {};
a.__proto__ = B.prototype;
B.call(a); 
// 等同于: B.prototype.constructor.call(a);

// 会打印:B {name: "lynch"}
console.log(a);

参考资料

js中的new()到底做了些什么?