【问题标题】:How to link a javascript object property to another property of the same object?如何将 javascript 对象属性链接到同一对象的另一个属性?
【发布时间】:2016-07-18 18:37:27
【问题描述】:

有没有办法将一个对象属性的值链接到另一个对象属性的值?

我的想法是,我有类似例外接口的东西,所以我的 obj 需要 propertys.name.value。在这种特殊情况下,名称很容易从值构造(值是一个数组,名称是array.toString()

我可以使用 obj.value.toString() 代替 value,但代码需要使用 obj.name 才能使其适用于所有情况。

我尝试了这段代码,但它没有产生我想要的结果。我怎样才能达到预期的行为?

obj = {value: array, name: this.value.toString()}

【问题讨论】:

    标签: javascript object hyperlink properties interface


    【解决方案1】:

    您可以使用getter.

    var obj = {
      value: array,
      get name() {
        return this.value.toString();
      }
    };
    console.log(obj.value.toString() === obj.name); // true
    

    如果需要,您甚至可以将其扩展为使用 setter

    var obj = {
      value: array,
      get name() {
        return this.value.toString();
      },
      set name(val) {
        this.value = val.split(','); // or any other operation you may need
      }
    };
    obj.name = '1,2,3';
    console.log(obj.value); // ['1', '2', '3']
    

    【讨论】:

    • 我不知道 javascript 有吸气剂。非常感谢!
    【解决方案2】:

    如果你需要名字来做某事,你需要一个函数:

    obj = {value: ['foo','bar'], name: function() { return this.value.toString() }}
    
    
    console.log(obj.value)
    console.log(obj.name())
    

    ["foo","bar"]
    富,酒吧

    【讨论】:

    • 这不起作用,因为您必须使用 obj.name()。而且我不能使用大括号,因为我的代码需要一个属性而不是一个函数。这可以工作,但我必须为此更改所有代码。以上答案完美解决了我的问题
    【解决方案3】:

    没有。初始化对象时无法访问属性。但是,您可以在创建 obj 后设置它。

    obj = {value: array, name:null}
    obj.name = obj.value.toString();
    

    【讨论】:

    • 上述解决方案可以解决问题。您的答案对我不起作用,因为我必须手动保持值和名称同步...
    • 只要确保在该 getter 方法中对值进行空检查即可。
    【解决方案4】:

    使用吸气剂:

    var obj = {
        value: [1, 2, 3, 4, 5, 6, 7, 8],
        get name(){
            return this.value.toString()
        }
    }
    
    console.log(obj.value)
    console.log(obj.name)

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 2011-03-11
      • 2019-04-27
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多