jquery延伸:这里发生了什么?

时间:2015-07-13 15:14:22

标签: javascript jquery

我根据Douglas Crockford在他的书#34; Javascript: the good parts"中提出的布局创建了一个对象构造函数。

此构造函数在向其添加各种成员和方法后返回that对象。 其中一种方法是克隆函数,其中JQuery extend用于深层复制that对象。

然而,在创建克隆之后,发生了一些奇怪的事情 - 修改克隆的成员似乎不会影响其方法中的that对象。

您可以在JSFiddle

上看到实时示例

代码:

var ctr = function() {
    var that = {};

    that.a = 0;

    that.f = function() {
        return that.a;
    };

    that.clone = function() {
        return jQuery.extend(true, {}, that);
    }

    return that;
}

var obj1 = ctr();
var obj2 = obj1.clone();

obj2.a = 5; 

// Why are these values different????
console.log(obj2.a);        // prints '5', as expected
console.log(obj2.f());      //prints '0'!!!! WHY??

如果我们在JQuery扩展参数中使用this而不是that,它会按预期工作。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

that.f正在关闭that的{​​{1}},当您使用extend时,正在复制该闭包。

o1