如何扩展jquery对象

时间:2013-06-16 23:43:41

标签: javascript jquery extend

我已尝试在Stackoverflow上使用其他示例来扩展jquery对象,但我没有成功。

    var z = {

        vars: {
            x: $('#c')
        }

    };

    var y = {

        v: $(this).val(a),
        h: $(this).html(a)

    };

    $.extend(y,z);

    alert(y.vars.h.x);

2 个答案:

答案 0 :(得分:1)

看起来你正确地延伸它们,之后你只是把它们称错了。我将以下内容放在一起,以帮助调试它的工作原理。

var z = {
    vars: {
        x: "var_Z.X"
    }
};

var y = {
    v: "var_Y.V",
    h: "var_Y.H"
};

$.extend( y, z );

// Output
    ( y.vars.x ) // var_Z.X
    ( y.v ) // var_Y.V
    ( y.h ) // var_Y.H

    ( z.vars.x ) // var_Z.X
    ( z.v ) // undefined
    ( z.h ) // undefined

http://jsfiddle.net/daCrosby/6YvHw/

答案 1 :(得分:0)

jQuery.extend( target [, object1 ] [, objectN ] )

请记住,目标对象(第一个参数)将被修改,并且也将从$.extend()返回。
但是,如果要保留两个原始对象,可以通过将空对象作为目标传递来实现:

var object = $.extend({}, object1, object2);

示例

var object1 = {
  apple: 0,
  banana: { weight: 52, price: 100 },
  cherry: 97
};
var object2 = {
  banana: { price: 200 },
  durian: 100
};

// Merge object2 into object1
$.extend( object1, object2 );

输出

{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}

<强>解释

默认情况下,$.extend()执行的合并不是递归的;如果第一个对象的属性本身是objectarray,则它将被第二个或后续对象中具有相同键的属性完全覆盖。
值未合并。通过检查banana的值,可以在下面的示例中看到这一点。但是,通过传递true作为第一个函数参数,对象将以递归方式合并。

参考:http://api.jquery.com/jQuery.extend/