![](/img/trans.png)
[英]Why can I use a variable in an assignment to that same variable in an object literal, but it creates a self-reference in a function literal?
[英]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
將是未定義的。 更換this
與MyObject
,它應該工作。
這不會起作用,因為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.