如何更改传递给函数的对象的属性值?

时间:2016-06-18 15:46:00

标签: javascript object

我正在尝试更改传递给我的函数的对象的属性值。如果对象具有该属性(例如' stuff'它应该将其值从某些值更改为'新值' - 但是我的代码不起作用 - 有人可以解释为什么它不起作用以及我如何改变价值观? 谢谢!!

function changeProperties(obj) {
    //  var obj;
    return function() {
            //var properties=
            for (var key in obj) {
                if (arguments.length == 1) {
                    if (key == arguments[0]) {
                        return obj[key];
                    } else {

                        obj[key] = arguments[1];
                        return obj[key];
                    }
                }
            }
        }
    //return obj;
}

var obj = {
    stuff: 'some'
};
var changing = changeProperties(obj);

changing('stuff', 'new value');
obj.stuff;

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

var changeProperty = function(obj, prop, val) {
    if(obj.hasOwnProperty(prop)) {
        obj[prop] = val;
    }
};

var obj = { hello: 'world' };
changeProperty(obj, 'hello', 'test'); // hello: test
changeProperty(obj, 'nonexisting', 'changed value'); // won't be affected

编辑:对于多个属性:

var changeProperties = function(obj, changes) {
    for(prop in changes) {
        if(obj.hasOwnProperty(prop)) {
            obj[prop] = changes[prop];
        }
    };
};

var obj = { name: 'John', surname: 'Doe' };
changeProperties(obj, { name: 'Abraham', surname: 'Lincoln' });

答案 1 :(得分:0)

您的代码无法正常运行,因为您的嵌套设置不正确。

但更基本的是,没有必要循环属性。你可以说

function changeProperties(obj) {
    return function() {
        if (arguments.length === 2) obj[arguments[0]] = arguments[1];
        return obj[arguments[0]];
    };
}

或许更可读

function changeProperties(obj) {
    return function(key, val) {
        if (val !== undefined) obj[key] = val;
        return obj[key];
    };
}