簡體   English   中英

為什么我不能從對象文字中引用對象文字?

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

不確定這是否可能或者我做錯了。 我試圖讓對象文字引用它自己的屬性之一,這是另一個對象文字。 我一直收到錯誤聲明它未定義:

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將是未定義的。 更換thisMyObject ,它應該工作。

這不會起作用,因為this將被定義為window

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

請參閱3.輸入功能代碼“this”關鍵字如何工作?

如果您希望繼續使用this ,可以使用Function.prototype.call()Function.prototype.apply(),如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM