观察变量的变化

时间:2014-11-17 09:46:50

标签: javascript

我在javascript中有以下变量:

var stC = {
    kosten: 5,
    tijd: 4,
    locatie: 3,
    beoordeling: 2,
    garantie: 1
};

如果例如stC.kosten更改为3,我想更改具有相同值的变量,在此示例stC.locatie中,要更改为stC.kosten的旧值。

因此,如果stC.kosten变为3,stC.locatie变为5 或者,如果stC.beoordeling变为5,则stC.kosten变为2。

尝试搜索,但无法找到解决问题的方法。

有谁知道我该怎么做?

4 个答案:

答案 0 :(得分:1)

这样的东西?

var stC = { kosten: 5, tijd: 4, locatie: 3, beoordeling: 2, garantie: 1 };

function changeValue(obj, key, value){

    var current = obj[key],
        match = getKeyByValue(obj, value);

    if(!match) return;  

    // swap values
    obj[key] = value;
    obj[match] = current;
}

function getKeyByValue(obj, value){
     return Object.keys(obj).filter(function(key) {
         return obj[key] === value; 
     })[0];
}

changeValue(stC, 
           'kosten', // property to change
            3); // new value

http://jsfiddle.net/0vsyj603/

如果您想使用此IE9之前的版本,请将填充物用于Object.keys

答案 1 :(得分:0)

stC.prototype = 
{
    setKosten : function(value)
    {
        this.kosten = value;
        this.locatie = whatever;
    }
};

答案 2 :(得分:0)

使用对象观察者。

Object.observe(stC, function(changes) {
    changes.forEach(change) {
        switch (change.name) {
             case "kosten":
                 change.object.locatie = change.oldValue;
                 ...
             ...
        }
    });
});

目前,您只能在Chrome中找到它。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe

答案 3 :(得分:-2)

您可以使用getter和setter

var o = {
    _kosten: 3,
    get kosten() { return this._kosten; },
    set kosten(x) { this._kosten = x; /* DO YOUR ADDITIONAL LOGIC HERE */ }
};

以下是MDN文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_settershttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/gethttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set