为什么可以't我从对象文字内部引用对象文字

Why can't I reference an object literal from inside an object literal?

本文关键字:文字 对象 内部 引用 为什么      更新时间:2023-09-26

不确定这是否可能,或者我做错了。我试图让一个对象文字引用它自己的属性之一,它是另一个对象的文字。我一直收到一个错误,说它是未定义的:

var MyObject = {
    init: function(){
        this.elements.buttons.click(function(){
            alert('hit');
        });
    },
    elements: {
        buttons: $('button')
    }
}

我做错了什么?

更新:main.js调用init按需初始化,这可能会破坏作用域——

function executeFunctionByName(functionName, context /*, args */) {
    var args = [].slice.call(arguments).splice(2);
    var namespaces = functionName.split(".");
    var func = namespaces.pop();
    for(var i = 0; i < namespaces.length; i++) {
        context = context[namespaces[i]];
    }
    return context[func].apply(this, args);
}
$(document).ready(function(){
    // invoke init() for any element that requests it
    $('[data-page]').each(function(i, p){
        var page = 'APP.MODEL.' + $(p).data('page') + '.init';
        executeFunctionByName(page, window)
    });
});

如果直接调用该函数而不经过MyObject,则this将是未定义的。用MyObject替换this,它应该可以工作。

这将不起作用,因为this将被定义为window:

var MyObject = {
    // init: ...
}
var init = MyObject.init;
init();

请参见3。输入函数代码:;这个";关键词工作?

如果你想继续使用this,你可以使用Function.protype.call()或Function.protype.apply(),比如

var MyObject = {
    // init: ...
}
var init = MyObject.init;
init.call(MyObject);