var num = new Number(1);
console.log(num) //Number {[[PrimitiveValue]]: 1}
function foo (name) {
this.name = name;
}
var bar = new foo('jack');
console.log(bar.name) //jack
JavaScript中的 new 操作符到底干了什么?
在MDN上对new的解释是这样的,new 运算符创建一个自定义对象或具有构造函数的内置对象的实例
那么,如何创建呢?
实际上,使用new运算符来调用函数时,会执行以下操作:
- 创建一个全新的对象
- 这个新对象会被执行[[Prototype]]连接
- 这个新对象会绑定到函数调用的this
- 如果构造函数返回了一个引用对象,那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为步骤3的新对象
可以用如下代码表示:
function New (f) {
var n = { '__proto__': f.prototype };
return function () {
f.apply(n, arguments);
return n;
};
}
让我们测试一下
注意,这只是用代码大致描述new运算符的执行过程,方便我们理解过程,并不能替代new运算符,比如步骤4的判断就没有实现
《你不知道的JavaScript上卷》