给变量名称,但不是函数的值
问题描述:
要删除繁琐的代码,我想创建一个函数来简化它。
所以要改变我存储在一个对象中的设置,我创建了这个。给变量名称,但不是函数的值
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');
不会明显工作。
那么我该如何解决这个问题?我如何将一个变量传递给一个函数,而不是它的值,所以它可以被修改?
注意:该功能现在被简化了,但是它在工作时会包含更多的魔法。
答
当你做settings.color你得到一个值,而不是对象。你必须做一些像
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
。第一种表示法允许您动态指定应该更改的属性。
+0
干杯。新的JavaScript,所以我不知道这种方法。 – 2011-12-26 21:47:32
因为我想“删除繁琐的代码”,这肯定会违背它。 – 2011-12-26 21:54:00
@EinarLöve'乏味的代码'?我的'解决方案'正是你想要的。 setField(“settings.color”,“red”)按照你的想法工作。我也给出了“正确”的做法。虽然你的原始要求是错误的,并且不应该使用这两种解决方案(包括lwburk的代码(与我的代码相同)) – AlanFoster 2011-12-26 21:56:08
你的第一个功能绝对就是我正在寻找的东西。我以前的评论是对你的编辑作出的回应。 – 2011-12-26 21:59:51