Greet是一個簡單的函式,它回傳一個函式作為輸出。
我們添加dev到greet函式的原型中來顯示開發者的名字。
function greet() {
function hello(name) {
console.log(`Hello ${name}`);
}
return {hello}
}
greet.prototype.dev = "Dev name";
let greetObj = new greet();
console.log(greetObj.dev) // Displays as undefined.
我的期望是,greetObj.dev或者從greet 函式創建的任何其他物件將顯示 中dev定義的屬性,greet prototype但我們正在獲取undefined.
任何人都可以請幫助我在這里出錯的地方嗎?
uj5u.com熱心網友回復:
你只需要this在建構式中賦值。你不必回傳anything。JS 將回傳一個物件并將所有屬性分配給該物件
function greet() {
function hello(name) {
console.log(`Hello ${name}`);
}
this.hello = hello;
}
greet.prototype.dev = "Dev name";
let greetObj = new greet();
console.log(greetObj.dev);
Best Practice
但這不是在建構式中附加函式的最佳實踐。它只會hello向所有物件添加函式,這些物件不必要地為每個物件創建多個副本,您不應該這樣做。
理想情況下,您應該將該功能附加到其prototype上:
function greet() {}
function hello(name) {
console.log(`Hello ${name}`);
}
greet.prototype.hello = hello;
greet.prototype.dev = "Dev name";
let greetObj = new greet();
console.log(greetObj.dev);
greetObj.hello("developer");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370223.html
