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