对象文字函数引用中的歧义:将“this”替换为对象文字
使用对象文字时会出现一个重要问题:可以对象中的函数使用文字名称而不是“this”来引用其父对象?虽然这看起来有效,但它可能会导致意想不到的后果。
考虑以下示例:
var obj = { key1: "it", key2: function() {return this.key1 + " works!"} }; alert(obj.key2());
此代码会触发控制台错误,因为 key2 函数中的“this”引用全局对象(窗口)而不是 obj 对象。通过直接在函数中使用对象文字可以避免此错误:
var obj = { key1: "it", key2: function() {return obj.key1 + " works!"} }; alert(obj.key2());
但是,即使这种方法也不能避免问题。让我们分析一下 deux 附加场景:
var obj = { key1: "it", key2: function() { return this.key1 + " works!" } }; var func = obj.key2; alert(func()); // error
将 key2 函数作为独立函数(而不是方法)调用obj) 破坏了 'this' 引用并可能导致意外
var obj = { key1: "it", key2: function() { return obj.key1 + " works!" } }; var newref = obj; obj = { key1: "something else"; }; alert(newref.key2()); // "something else works"
从辅助引用更改 obj 引用可能会使 key2 函数的内部引用无效到正确的位置object.
为了解决这些潜在问题,有几种解决方案可用:
选择最合适的解决方案取决于关于遇到所概述问题的具体背景和可能性。尽管如此,在使用对象字面量函数时,了解潜在的陷阱并采取必要的预防措施至关重要。
以上是我可以用 JavaScript 对象文字函数中的对象文字名称替换'this”吗?的详细内容。更多信息请关注PHP中文网其他相关文章!