JavaScript new操作符做了什么

290 阅读1分钟
var obj = new Base()
  1. 创建一个新的空对象
  2. 将新对象的__proto__指向构造函数的 prototype
  3. 将构造函数的作用域赋给新对象,也就是让构造函数的 this 指向这个新对象。
  4. 执行构造函数中的代码( 为新对象添加属性 )
  5. 返回新对象
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);  //改变this指向,并调用这个函数
  • 完整示例
function Base(a){ //构造函数
	this.a = a
}
Base.prototype.b = "bbb"

//new 操作
var b1 = new Base("aaa")
console.log(b1)

// 模拟new操作
var b2 = {}
b2.__proto__ = Base.prototype
Base.call(b2,"aaa")  //改变this指向,并且调用这个函数,使this.a 执行。

console.log(b2)

我们从打印结果可以看出两个东西完全一样。new操作其实只是一个语法糖。