Javascript 使用“更新对象内的值”;这";
我试图从对象本身内部更新一个值。我有以下代码:Javascript 使用“更新对象内的值”;这";,javascript,object,Javascript,Object,我试图从对象本身内部更新一个值。我有以下代码: var stepData = { 0: { ref: "Home", values: { }, init: function(){ stepData[1].ref = 'new value'; alert(stepData[1].ref);
var stepData = {
0: {
ref: "Home",
values: {
},
init: function(){
stepData[1].ref = 'new value';
alert(stepData[1].ref);
return;
},
save: function(){
}
},
1: {
ref: "one"
}
}
$("#run").click(function(){
stepData[0].init();
});
这很好用。然而,我无法取代
stepData[1].ref = 'new value';
alert(stepData[1].ref);
与
为什么不呢
编辑:对不起,原代码有误。现已修复。
此
主要由函数的调用方式设置,而不是由函数的定义位置设置。您的代码:
$("#run").click(function(){
stepData[0].init();
});
…调用init
,将this
设置为stepData[0]
如果愿意,您可以使用函数调用将此
设置为stepData
:
$("#run").click(function(){
stepData[0].init.call(stepData);
});
根据您对问题的评论:
那么我现在的方式还可以吗
是的,只要stepData
是单例,就不需要在其函数中使用this
有关此
的更多信息(在我的博客上):
stepData[0].init()
,那么这个指的是stepData[0]
,而不是stepData
改善这种情况的一种方法是使用立即调用的函数来创建对象:
var stepData = (function(){
var mySelf = {
0: {
ref: "Home",
values: {
},
init: function(){
mySelf[1].ref = 'new value';
alert(mySelf[1].ref);
return;
},
save: function(){
}
},
1: {
ref: "one"
}
};
return mySelf;
})();
以下内容将中断您现在拥有的代码:
var newVariable = stepData;
stepData = null;
newVariable[0].init();
但它不会破坏上述方法。此
仅适用于对象构造函数。另外,在jQuery事件处理程序中,this
将始终引用所选的DOM元素。console.log(this)代码>它不起作用,因为如果调用stepData[0].init()
,那么这个指的是stepData[0]
,而不是stepData
。啊,好的,我明白了。那么,我得到它的方式还可以吗?@DJDavid98:“这个
只适用于对象构造函数”不,那根本不是真的这个
基本上只是一个特殊的函数参数,它可以用于任何地方。它通常用于非构造函数(例如直接连接到对象的函数)。
var newVariable = stepData;
stepData = null;
newVariable[0].init();