new操作符做了些什么
- 创建空对象;
- 空对象的原型指针指向构造函数的原型对象;
- 利用函数的call方法改变this指向,在空对象上挂载属性或方法;
- 返回对象。
function Foo(name) {
this.name = name;
return this
}
// 创建一个空对象
var obj = {}
// 空对象的隐式原型指向构造函数的显式原型
obj.__proto__ = Foo.prototype
// 用call改变this指向,把参数传过去,由于是call Foo函数会直接执行,属性就挂载上了
var foo = Foo.call(obj, 'mm')
// 由于Foo返回的是当前this,也就是obj
console.log(foo)