在javascript中分配另一个键的值

时间:2015-11-05 01:26:25

标签: javascript

我只想知道如何在同一个哈希中访问另一个键的值。 从哈希里面。不是通过做myHash.key2 = myHash.key1 ....; 我的意思是一种做法:

var myHash = {
    key1: 5,
    key2: key1 * 7,
    key3: true,
    key4: (key3)? "yes" : "no"
};

PS:这只是实际代码的简化版本,实际上每个键都有一些复杂的操作。值而不是简单的数字或bools。

2 个答案:

答案 0 :(得分:2)

您无法在文字定义中引用对象上的其他键。基于对象中的其他键或其他值设置键的选项包括:

  1. 对可以根据其他属性返回值的键使用getter函数。

  2. 使用常规函数作为可以根据其他属性返回值的键。

  3. 在文字定义之外指定一个键/值,您可以根据其他键/属性分配静态值。

  4. 以下是每个选项的示例:

    // use getters for properties that can base their values on other properties
    var myHash = {
        key1: 5,
        get key2() { return this.key1 * 7; },
        key3: true,
        get key4() { return this.key3 ? "yes" : "no";}
    };
    
    console.log(myHash.key2);    // 35
    
    // use regular functions for properties that can base 
    // their values on other properties
    var myHash = {
        key1: 5,
        key2: function() { return this.key1 * 7; },
        key3: true,
        key4: function() { return this.key3 ? "yes" : "no";}
    };
    
    console.log(myHash.key2());    // 35
    
    // assign static properties outside the literal definition
    // that can base their values on other properties
    var myHash = {
        key1: 5,
        key3: true
    };
    myHash.key2 = myHash.key1 * 7;
    myHash.key4 = myHash.key3 ? "yes" : "no";
    
    console.log(myHash.key2);    // 35
    

    注意:前两个选项是“实时”。如果您更改myHash.key1的值,则myHash.key2myHash.key2()的值也会更改。第三个选项是静态的,myHash.key2的值不会跟随myHash.key1中的更改。

答案 1 :(得分:0)

首先,您需要使用关键字this来引用对象属性。这样做:

var myHash = {
  key1: 5,
  key2: 11,
  key3: true,
  isKey3true: function(){
    var r = this.key3 ? 'yes' : 'no';
    return r;
  }
}
myHash.key1 = 100;
console.log(key2); // key2 not a method
myHash.key3 = false;
console.log(myHash.isKey3true()); // method will review key3 value