gpt4 book ai didi

javascript - 为什么我不能从对象字面量内部引用对象字面量?

转载 作者:行者123 更新时间:2023-12-02 17:29:26 25 4
gpt4 key购买 nike

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

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。输入功能码:How does the "this" keyword work?

如果您想继续使用,您可以使用Function.prototype.call()Function.prototype.apply()像这样:

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

关于javascript - 为什么我不能从对象字面量内部引用对象字面量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com