我有这个js:
(function () {
Namespace = {
settings: {
myVar: 'test'
},
init: function() {
var memberSearchFrm = document.getElementById('memberSearch');
memberSearchFrm.onsubmit = function() {
this.someOtherFunction(); // doesn't work
console.log(this.settings.myVar); // doesn't work
}
},
someOtherFunction: function() {
console.log('test');
}
}
Namespace.init();
})();
当我进入onSubmit函数时,我正在丢失'this'的上下文。你能帮助我理解为什么会发生这种情况以及如何解决这种情况吗?
答案 0 :(得分:3)
尝试这个技巧。
在你关闭之前设置一个名为'that'的变量。
var that = this;
然后在关闭时使用它。您遇到的问题是闭包是附加到您的DOM节点而不是您的对象。因此,当您调用闭包时,它具有DOM节点的值。
答案 1 :(得分:3)
在memberSearchFrm.onsubmit
内,this
引用memberSearchFrm
,而不是您想要的对象。您需要保存对this
的引用。
init: function() {
var that = this;
var memberSearchFrm = document.getElementById('memberSearch');
memberSearchFrm.onsubmit = function() {
that.someOtherFunction();
console.log(that.settings.myVar);
}
},
答案 2 :(得分:1)
我遇到了与闭包相同的问题,并试图用不同的方法来尝试在闭包中调用其他函数。
我最终以这种格式确定了:
(function () {
var obj = {
settings: {
myVar: 'test'
},
init: function() {
var memberSearchFrm = document.getElementById('memberSearch');
memberSearchFrm.onsubmit = function() {
obj.someOtherFunction();
console.log(obj.settings.myVar);
}
},
someOtherFunction: function() {
console.log('test');
}
}
obj.init();
})();