为什么我不能从对象文字中引用对象文字?

时间:2014-04-21 20:55:55

标签: javascript

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

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)
    });
});

1 个答案:

答案 0 :(得分:2)

如果您直接调用该函数而不经过MyObject,则this将是未定义的。将this替换为MyObject,它应该有效。

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

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

参见 3。输入功能代码How does the "this" keyword work?

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

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