我正在尝试更改传递给我的函数的对象的属性值。如果对象具有该属性(例如' 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;
答案 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];
};
}