-6

我想重写值,以便仅更改现有变量但不添加任何其他变量。

例如:

    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" : ""
    }
4

2 回答 2

3

使用该hasOwnProperty功能相对简单:

for(var key in _newProperties) {
    if(rectangle.hasOwnProperty(key)) {
        rectangle[key] = _newProperties[key];
    }
}

这循环遍历键_newProperties并将值写入rectangleiffrectangle具有同名的属性。请注意,通过原型继承的属性将被忽略,因为hasOwnProperty将为它们返回false

于 2013-06-30T02:21:44.167 回答
0

如果您希望使用 的属性更新的现有属性,则必须使用循环:rectangle_newPropertiesfor...in

for (var prop in _newProperties) {
    if (rectangle.hasOwnProperty(prop)) {
        rectangle[prop] = _newProperties[prop];
    }
}

rectangle.hasOwnProperty确保它rectangle实际上具有该属性并检查它是真正rectangle的属性,而不是原型链中更高的属性。

于 2013-06-30T02:21:41.507 回答