Javascript 为函数指定变量名,但不指定其值

Javascript 为函数指定变量名,但不指定其值,javascript,Javascript,要删除繁琐的代码,我想创建一个函数来简化它。 因此,为了更改存储在对象中的设置,我创建了这个 var settings = { color : 'red' //one of many settings }; alert(settings.color); // returns red function changeValue(property, value){ settings.property = value; } changeValue('color', 'blue')

要删除繁琐的代码,我想创建一个函数来简化它。
因此,为了更改存储在对象中的设置,我创建了这个

var settings = {
    color : 'red'
    //one of many settings
};
alert(settings.color); // returns red
function changeValue(property, value){
    settings.property = value;
}
changeValue('color', 'blue');
alert(settings.color); // still return red
它似乎被当作字符串处理。
如果我试试这个:

function changeValue(object, value){
    object = value;
}
changeValue(settings.color, 'blue');
它只会为函数提供“红色”的值。
这是:

changeValue('settings.color', 'blue');
显然不起作用

那么我该如何解决这个问题呢?如何将变量传递给函数而不是其值,以便对其进行更改


注意:该函数目前已被简化,但在工作时会包含更多的魔法。

当您进行设置时。颜色会得到一个值,而不是对象。你必须做一些类似的事情

function changeValue(object, field, value){
    object[field] = value;
}

changeValue(settings, 'color', 'blue')
这可能根本不会减少你的时间


编辑:: 我为你做了这个函数。但是请。。永远不要用它

var settings = {
    color : "blue"
}

function setField(str, value){
    var args = str.split(".").reverse();
    var obj = window[args.pop()];
    while(args.length -  1 > 0) 
        obj = obj[args.pop()]
    obj[args.pop()] = value;
}

alert(settings.color);
setField("settings.color", "red");
alert(settings.color);
将要更改的对象和属性的名称作为单独的参数传递:

function changeValue(obj, prop, value) {
    obj[prop] = value;
}

changeValue(settings, "color", "blue");

假设
var prop=“color”
那么
obj[prop]
等同于
obj.color
。第一个符号允许您动态指定应更改的属性。

Cheers。对javascript不熟悉,所以我不知道这个方法。因为我想“删除乏味的代码”,这肯定会违背它。@EinarLöve“乏味的代码”?我的“解决方案”正是你想要的。setField(“settings.color”、“red”)可以根据需要工作。我也给出了正确的方法。虽然您最初的需求是错误的,并且不应该使用这两种解决方案(包括lwburk的代码(与我的代码相同)),但您的第一个函数肯定正是我想要的。我之前的评论是对你的编辑的回应。