【问题标题】:how do i get a reference of primitive value?我如何获得原始价值的参考?
【发布时间】:2016-03-31 13:10:34
【问题描述】:
var number = 12345;

var obj = {};

做类似的事情

obj.look    ((((((some operator or function to get a reference of number )))))      number

不管怎样,现在让我们想想 obj 有一个对数字的引用。
所以我想这样做。

obj.look = 'abc';

console.log (number); // hopefully  'abc'

我希望它会是:

  1. 不是方法(如 obj.look())
  2. 但可以在属性中引用(如 obj.look)

    我要问的是如何获取原始值的引用。
    我相信一定有办法。请帮帮我。

【问题讨论】:

    标签: javascript types properties reference primitive


    【解决方案1】:

    你可以使用Object.defineProperty:

    var number = 12345;
    
    var obj = {};
    Object.defineProperty(obj, 'look', {
        get() {
            return number;
        },
        set(value) {
            number = value;
        }
    });
    
    document.write(obj.look + '<br>');
    obj.look = 'abc';
    document.write(number);

    【讨论】:

    • 这如何解决问题的第二部分(imo 没有意义):obj.look = 'abc'; console.log (number); // hopefully 'abc'?
    • 非常感谢。现在,我可以好好睡觉了。正如@MinusFour 提到的, var obj = { get look(){return number;} };也可以。
    【解决方案2】:

    您可以拥有一个对象,将该引用复制到另一个变量,改变该对象,并且由于两个变量都持有对同一个对象的引用,因此对一个变量所做的任何更改也可以从另一个变量访问。

    原始值可以包装到对象中(new Object),但不能以其他方式引用它们。字符串对象是不可变的(所有属性都是不可配置的、不可写的),数字对象的值也不可访问。所以你不能改变任何一个对象的值。

    这意味着当你这样做时:

    obj.look = 'abc';
    

    您正在擦除旧引用并在那里设置一个新字符串(对象或原语)。 number 仍将保留旧引用并保持不变。

    所以,不。我认为这在 Javascript 中是不可能的。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 2012-05-17
      • 2016-10-17
      • 2020-02-19
      • 2020-02-11
      • 2022-07-31
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多