new 操作符的步骤
- 创建一个新对象
- 将构造函数的作用域赋给新对象
- 执行构造函数中的代码
- 返回新对象
返回值的影响
如果返回值是原始类型(String/Boolean/Number/Null/Undefined),不影响 new 的结果:
function T() {
this.a = 1;
return 1; // 不影响
}
new T(); // T {a: 1}
如果返回值是引用类型(Object/Array/Date/RegExp/Function),new 返回的就是该返回值:
function T() {
this.a = 1;
return new Date();
}
new T(); // Date 对象,不是 T 的实例
特别注意:new Boolean(true)、new Number(1)、new String("a") 也是对象!
function T() {
this.a = 1;
return new Boolean(true);
}
new T(); // Boolean {true},不是 T 的实例