例子一 標准構造函數
function F1() {
this.name = 'f1';
}
console.log(new F1()); // {name: "f1"} 返回實例, 委托原型
console.log(new F1().name); // f1
console.log(F1().name); // Uncaught TypeError: Cannot read property 'name' of undefined
console.log(F1()); // undefined
例子二 函數返回引用類型值
function F2() {
this.name = 'f2';
return {};
}
console.log(new F2()); // 引用類型值, 返回該值{}
console.log(new F2().name); // undefined
// 這種情況,使用new調用就與調用正常函數一致
console.log(F2()); // {} 常規函數調用
console.log(F2().name); // undefined
例子三 函數返回基本類型值
function F3() {
this.name = 'f3';
return 5;
}
// 這種情況, 使用new調用函數就與調用標准構造函數一致
console.log(new F3()); // 基本類型值, 仍舊返回構造函數的實例 {name: f3}
console.log(new F3().name); // f3
console.log(F3()); // 5 常規函數調用
console.log(F3().name); // undefined