不确定这是否可行或我是否做错了。我试图让对象文字引用它自己的属性,这是另一个对象文字。我一直收到错误声明它未定义:
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)
});
});
答案 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);