jQuery事件中'this'的对象上下文

时间:2011-05-03 19:50:43

标签: javascript jquery closures object-initializers

说我在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

2 个答案:

答案 0 :(得分:5)

你不能打电话给add,这不是一个功能。

如果您调用add.invoke函数,this.default是您在add对象中定义的默认对象。你不需要做任何特别的事情。

示例:http://jsfiddle.net/p4j4k/

答案 1 :(得分:0)

要使用您选择的上下文调用函数,您可以使用.apply(context)(有关function.applyfunction.call的更多信息):

com.company.long.namespace.actions.add.invoke.apply(com.company.long.namespace.foo.util.context);

在调用函数this中将引用上下文对象 请检查此jsFillde example