使用new一个构造函数,如果函数返回return 1、return {}、return null、return true会发生什么情况?
在JavaScript中,当你使用new关键字来调用一个构造函数时,这个构造函数内部实际上会经历以下步骤:
- 创建一个新的空对象。
 - 将这个新对象的原型链连接到构造函数的
prototype对象。 - 将构造函数的
this上下文设置为这个新对象。 - 如果构造函数没有返回一个对象,则自动返回这个新创建的对象。
 
现在,让我们看看当你返回不同的值时,会发生什么情况:
- 
return 1 (或任何原始值,如字符串、布尔值、数字、undefined):
- 构造函数会忽略这个返回值,并自动返回在开始时创建的新对象。
 
 
function Test() {
    this.name = "Test";
    return 1;
}
const obj = new Test();
console.log(obj); // Test { name: 'Test' }
- 
return {} (或一个通过字面量创建的新对象):
- 构造函数会返回这个新创建的对象,而不是开始时自动创建的那个对象。
 
 
function Test() {
    this.name = "Test";
    return {};
}
const obj = new Test();
console.log(obj); // {},注意这不是开始时创建的那个对象
- 
return null:
- 和返回原始值一样,构造函数会忽略这个
null返回值,并自动返回在开始时创建的新对象。 
 - 和返回原始值一样,构造函数会忽略这个
 
function Test() {
    this.name = "Test";
    return null;
}
const obj = new Test();
console.log(obj); // Test { name: 'Test' }
- 
return true (或任何其他布尔值):
- 同样,构造函数会忽略这个布尔值返回值,并自动返回在开始时创建的新对象。
 
 
function Test() {
    this.name = "Test";
    return true;
}
const obj = new Test();
console.log(obj); // Test { name: 'Test' }
总结:当使用new关键字调用构造函数时,如果构造函数返回一个对象(通过new或其他方式创建的对象,但不是通过字面量创建的对象,除非明确返回),那么这个对象会被返回。否则,构造函数会忽略返回值,并返回自动创建的新对象。但通常,构造函数不应该返回任何值,除非你有特定的原因需要这样做。
                    
                
                
            
        
浙公网安备 33010602011771号