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

美食家

在阅读了网络上的许多示例后,我仍然对 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()直接运行,但这不是我想要做的。我希望能够将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());

我创建了另一个函数来返回一个调用this.printMessage(). 这样我就可以从对象外部访问该函数。

感谢大家的投入。

罗斯穆迪

欢迎来到thisJS 中关键字的奇迹

的值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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章