无法从 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");