如何使用jquery或javascript覆盖值?

时间:2013-06-30 01:58:22

标签: javascript jquery

我想过度写入值,以便只更改已存在的变量但不添加任何额外的变量。

例如:

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

2 个答案:

答案 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属性,而不是原型链中较高的属性。