在阅读了网络上的许多示例后,我仍然对 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()
. 这样我就可以从对象外部访问该函数。
感谢大家的投入。
欢迎来到this
JS 中关键字的奇迹。
的值this
取决于函数的调用方式(运行时绑定)。在您的示例中,this
是没有引用的对象上的方法。
您可以使用call
或bind
方法来绑定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] 删除。
我来说两句