Javascript mixin用于属性为对象歧义的对象

时间:2016-10-25 18:27:10

标签: javascript

这是一个用户定义的mixin,用于浅层克隆对象:

    function mixin(receiver, supplier) {
      Object.keys(supplier).forEach(function(key) {
         receiver[key] = supplier[key];
      });

      return receiver;
    }
    var supplier = {
        a:{b:10}
    };
    var receiver = mixin({},supplier);

并根据我的理解将一个对象分配给其他对象使它们相等,因为它们引用了相同的对象文字,当一个对象更改其属性时它也反映在另一个对象上但是下面的测试困惑我:

    receiver.a === supplier.a //true
    receiver.a = {b:20} //but
    supplier.a //still {b:10} I expected {b:20}

我在这做错了什么? P.S我知道ES6 Object.assign()但是这个mixin是为了我的理解而创建的。

1 个答案:

答案 0 :(得分:2)

分配与其他所有操作不同。由于它的工作原理,它打破了引用。

基本上,你在内存中有对象,每个变量都包含一个指向内存位置的指针。因此,当您编辑该对象时,您可以更改它的每个引用。

如果为变量赋值,则将新对象放入内存中的新位置,并将引用指针更改为新位置的指针。

enter image description here