【问题标题】:How do I change an object property via a reference variable?如何通过引用变量更改对象属性?
【发布时间】:2015-06-23 19:18:05
【问题描述】:

我试图通过指向一些带有局部变量的属性来简化流程。当我更改数组值时,属性也会更改(如预期的那样)。字符串和数字在其对应的对象属性中似乎没有改变。是否可以通过引用变量更改属性?


var obj = {
    prop: 0,
    prop2: 'a',
    prop3: [],

    iterate: function() {
        var ref = obj.prop,
            ref2 = obj.prop2,
            ref3 = obj.prop3,
            i = 0;

        ref++;
        ref2 = 'b';
        ref3[i] = 'b';

        console.log(obj.prop, obj.prop2, obj.prop3);
        //0, 'a', ['b']

        obj.prop++;
        obj.prop2 = 'b';
        obj.prop3[i] = 'b';

        console.log(obj.prop, obj.prop2, obj.prop3);
        //1, 'b', ['b']
    }
}

obj.iterate();

【问题讨论】:

  • 感谢您在没有任何解释的情况下投反对票。 :(
  • 别担心,人们只是在审查您的申请并发现需要改进的地方。我会尽快返回更新:)

标签: javascript object properties


【解决方案1】:

用局部变量指向一些属性

你不能。 JavaScript 没有指针。所有变量都保存值。

当我更改数组值时,属性也会更改(如预期的那样)。

不是真的。你改变了数组对象。属性没有改变,它仍然包含对数组的引用。

为什么字符串或数字不改变其对应的对象属性?

字符串和数字是原始值 - 你不能改变它们。您正在使用新值重新分配变量。您没有重新分配属性,因此不会更改它。

当您重新分配变量时,数组和其他对象也会发生同样的情况 - ref3 = []; 不会更改属性。

是否可以通过引用变量更改属性?

没有。你可以使用with statement,但这是被鄙视的。最好明确对象属性。

【讨论】:

  • 有趣。也许我误解了“不变性”的真正含义。谢谢!
猜你喜欢
  • 2019-06-15
  • 2019-06-18
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2020-01-19
相关资源
最近更新 更多