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

cwe*_*ton 5 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() { }
                });
            },
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我在JQuery click事件的上下文中调用它:

$(myElem).click(function() {
    com.company.long.namespace.actions.add.invoke();
});
Run Code Online (Sandbox Code Playgroud)

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

Guf*_*ffa 5

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

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

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