【问题标题】:How to invoke the method myFunction to return (name) i've tried many ways but it doesn't work如何调用方法 myFunction 以返回(名称)我尝试了很多方法但它不起作用
【发布时间】:2026-01-10 13:50:02
【问题描述】:

下面是我要说的

class User {
    constructor(name) {
        this.name = name;
    }

    myFunction() {
        return function() {
            return this.name;
        }
    }
}
let kk = new User("kk");
let speak = kk.myFunction();
speak();

我收到此错误:

未捕获的类型错误:无法读取未定义的属性“名称”

【问题讨论】:

  • 不可能调用myFunction 来返回当前写入的名称。
  • 返回后提醒。那条线永远不会运行。
  • 欢迎来到 Stack Overflow,您到底想做什么?如果你想要一个新的User,那么你应该把它分配给const jj = new User("jj");。然后您可以将函数分配给 const speak = jj.myFunction() 并使用 speak() 调用它。您的函数将返回名称,但它不会在您的 return 语句之后发出警报
  • 您的函数现在正在返回一个函数...此外,在您的方法myFunction 范围内,对name 的引用必须绑定到this,即this.name。我认为您必须更具体地了解您对该功能的意图才能获得合理的答案。因为,我不确定你为什么要返回一个函数,除非这是你的意图。

标签: javascript


【解决方案1】:

您应该改用this.name,并且该函数不应返回函数

 class User {
   constructor(name) {
     this.name = name;
   }
   myFunction() {
     alert(this.name);
     return this.name;
   }
}
let user = new User("jj").myFunction();

console.log(user)

编辑: 您现在编辑的问题与您发布的原始问题不同。这需要一个柯里化解决方案:

class User {

  constructor(name) {
    this.name = name;
  }
  myFunction() {
    let name = this.name;
    return function() {
      return name;
    }
  }
}
let kk = new User("kk");
let speak = kk.myFunction();
console.log(speak());

【讨论】:

  • return 不是方法
  • 谢谢!我错过了。
  • 是的,但它仍然有效。他没有将 return 作为一种方法调用,...他只是将 this.name 作为表达式引用并将其包装在括号中...它不是必需的,而是有效的。 @epascarello
  • @JaSuperior,这不是错误,只是不是编写返回语句的标准方式。
  • 我不想提醒名字
【解决方案2】:

您可以使用arrow function (() => {}),它不会有自己的this 绑定,而是使用封闭词法范围的this 值(在这种情况下是您的类)。

class User {
    constructor(name) {
        this.name = name;
    }

    myFunction() {
        return () => this.name;
    }
}
const speak = new User("kk").myFunction();
console.log(speak());

【讨论】:

    最近更新 更多