我想过度写入值,以便只更改已存在的变量但不添加任何额外的变量。
例如:
rectangle : {
"width" : 0,
"height" : 0,
"r" : 0,
"stroke" : "#000000",
"stroke-width" : 1,
"stroke-dasharray" : "No",
"fill-opacity" : 1.0,
"stroke-opacity" : 1.0,
"rotation" : 0,
"transform" : ""
}
_newProperties = {
"stroke" : "#FFFFFF",
"strokewidth" : 3,
"stroke-dasharray" : "No",
"font-size" : 12,
"font-weight" : "normal",
"font-style" : "normal",
},
rectangle : {
"width" : 0,
"height" : 0,
"r" : 0,
"stroke" : "#FFFFFF",
"stroke-width" : 3,
"stroke-dasharray" : "No",
"fill-opacity" : 1.0,
"stroke-opacity" : 1.0,
"rotation" : 0,
"transform" : ""
}
答案 0 :(得分:3)
使用hasOwnProperty
函数相对简单:
for(var key in _newProperties) {
if(rectangle.hasOwnProperty(key)) {
rectangle[key] = _newProperties[key];
}
}
这会遍历_newProperties
中的键,并将值写入rectangle
iff rectangle
具有相同名称的属性。请注意,将忽略通过原型继承的属性,因为hasOwnProperty
将为它们返回false
。
答案 1 :(得分:0)
如果您希望更新 rectangle
的现有属性,其属性为_newProperties
,则必须使用for...in
循环:
for (var prop in _newProperties) {
if (rectangle.hasOwnProperty(prop)) {
rectangle[prop] = _newProperties[prop];
}
}
rectangle.hasOwnProperty
确保rectangle
实际拥有该属性,并检查它是真正的rectangle
属性,而不是原型链中较高的属性。