5

假设我在 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 click 事件的上下文中调用它:

$(myElem).click(function() {
    com.company.long.namespace.actions.add.invoke();
});

由于'this'在 jQuery 事件回调中的工作方式,当从这个上下文调用时this.defaults是未定义的。无论如何仍然可以在这个范围内使用“this”,而不必定义完整的命名空间,或者不使用jQuery.proxy

4

2 回答 2

5

你不能调用add,它不是一个函数。

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

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

于 2011-05-03T20:13:16.463 回答
0

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

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

在invoke 函数this中将引用上下文对象。
检查这个jsFillde 示例

于 2011-05-03T20:30:23.117 回答