说我在javascript中定义了以下内容:
com.company.long.namespace = {
actions: {
add: {
defaults: {
url: 'myurl/submit',
},
invoke: function () {
var submitUrl = this.defaults.url;
com.company.long.namespace.foo.util.server.submit({
url: submitUrl,
success: function() { }
});
},
}
}
};
然后我在JQuery点击事件的上下文中调用它:
$(myElem).click(function() {
com.company.long.namespace.actions.add.invoke();
});
由于'this'在jQuery事件回调中的工作方式,从此上下文调用时, this.defaults 未定义。无论如何仍然在这个范围内使用'this',而不必定义完整的命名空间,或者不使用jQuery.proxy?
答案 0 :(得分:5)
你不能打电话给add
,这不是一个功能。
如果您调用add.invoke
函数,this.default
是您在add
对象中定义的默认对象。你不需要做任何特别的事情。
答案 1 :(得分:0)
要使用您选择的上下文调用函数,您可以使用.apply(context)
(有关function.apply和function.call的更多信息):
com.company.long.namespace.actions.add.invoke.apply(com.company.long.namespace.foo.util.context);
在调用函数this
中将引用上下文对象
请检查此jsFillde example