在很多情况下,我已经看到了jQuery如何修改this关键字以提供您希望实际存在的对象的伟大之处。大....
但是,如何处理自定义对象具有引用此关键字但通过jQuery调用的自定义方法的情况。
例如:
var myCustomObject = {
myCustomValue: 1,
myCustomMethod: function () {
switch (this.myCustomValue) {
case ....
}
}
};
如果使用jQuery回调调用“this”现在是jQuery“context”,显然会为myCustomValue返回undefined。
我注意到我可以直接引用实例,例如
switch (myCustomObject.myCustomValue) {}
但这看起来很烦人,我想知道是否有任何意想不到的副作用可能会由此造成......
这种情况的最佳做法是什么?
答案 0 :(得分:6)
如果不必公开:
var myCustomObject = new (function()
{
var myCustomValue = 1;
this.myCustomMethod = function () {
switch (myCustomValue) {
}
}
})();
若是:
var myCustomObject = new (function()
{
this.myCustomValue = 1;
var self = this;
this.myCustomMethod = function () {
switch (self.myCustomValue) {
}
}
})();
self
可以随意调用。
答案 1 :(得分:2)
如果你有这样的函数,你可以保持相同的语法:
function patchThis(obj) {
function patchFunction(orig) {
return function() {
return orig.apply(obj, arguments);
};
}
for(var i in obj) {
if(obj.hasOwnProperty(i)&&typeof obj[i]=="function") {
obj[i]=patchFunction(obj[i]);
}
}
}
然后只需在patchThis
上致电myCustomObject
。
您可以看到示例here。