new 关键词到底做了什么
Posted: 09.23.2019
问题描述
在如下的代码中,其背后运行的原理是什么?
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);