Javascript/Typescript 闭包问题 - 将对象的函数作为变量返回

Javascript/Typescript Closure Problem - Returning an object's function as a variable

在阅读了网络上的大量示例后,我仍然对 JavaScript/TypeScript 闭包感到很困惑。

这是我遇到问题的代码:

let obj = {
  message: '222',  
  printMessage: function() {
    return this.message
  },
}

console.log(obj.printMessage()); // 222
let func = obj.printMessage;
console.log(func());             // undefined

当我 运行 此代码时,出现错误 Cannot read property 'message' of undefined

我知道我可以直接 运行 obj.printMessage(),但这不是我想做的。我希望能够 return printMessage 函数作为变量并最终被另一个函数调用。

感觉是闭包的问题,​​不知道怎么处理。

非常感谢您的意见。

===========================================

更新:

在修改代码一段时间后,我找到了问题的解决方案。

这是我的解决方案。

let obj = {
  message: '222',  
  printMessage: function() {
    return this.message
  },
  getPrintMessage: function () {
      return () => this.printMessage()
  }
}

console.log(obj.printMessage()); // 222
let func = obj.getPrintMessage();
console.log(func());

我创建了另一个函数 return 调用 this.printMessage() 的匿名函数。这样我就可以从对象外部访问函数。

感谢大家的意见。

欢迎来到 JS 中 this 关键字的奇迹。

this 的值取决于函数的调用方式(运行时绑定)。在您的示例中,this 是一个没有引用的对象上的方法。

您可以使用 callbind 方法来绑定 this 值,或者在这种情况下也可以利用 getter 和 setter。

let obj = {
  message: '222',
  get mess() {
    return this.message
  }
}

const currentMessage = obj.mess

// Both return the same thing

currentMessage
obj.mess