无法从 returns 函数的函数原型中获取 属性
Unable to fetch property from prototype of function that returns function
Greet是一个简单的函数,returns一个函数作为输出。
我们在 greet 函数 的原型中添加了 dev
以显示开发者姓名。
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
.
任何人都可以帮助我哪里出错了吗?
您只需在构造函数中将值赋给this
即可。您不必 return anything
。 JS将return一个对象全部属性赋值给那个对象
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");
Greet是一个简单的函数,returns一个函数作为输出。
我们在 greet 函数 的原型中添加了 dev
以显示开发者姓名。
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
.
任何人都可以帮助我哪里出错了吗?
您只需在构造函数中将值赋给this
即可。您不必 return anything
。 JS将return一个对象全部属性赋值给那个对象
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");