在javascript中为另一个键赋值

在javascript中为另一个键赋值,javascript,Javascript,我只想知道如何访问同一散列中另一个键的值。 从散列的内部。不是通过执行myHash.key2=myHash.key1。。。。; 我指的是一种方式: var myHash = { key1: 5, key2: key1 * 7, key3: true, key4: (key3)? "yes" : "no" }; PS:这只是实际代码的简化版本,事实上每个键内部都有一些复杂的操作。值,而不是简单的数字或布尔。不能在文本定义中引用对象上的其他键。基于对象中的其他关键点

我只想知道如何访问同一散列中另一个键的值。 从散列的内部。不是通过执行myHash.key2=myHash.key1。。。。; 我指的是一种方式:

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

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

不能在文本定义中引用对象上的其他键。基于对象中的其他关键点或其他值设置关键点的选项有:

  • 对可以基于其他属性返回值的键使用getter函数

  • 对可以基于其他属性返回值的键使用常规函数

  • 在文字定义之外指定一个键/值,您可以在该定义中基于其他键/属性指定一个静态值

  • 以下是每个选项的示例:

    // 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.key2
    myHash.key2()
    的值也将更改。第三个选项是静态的,
    myHash.key2
    的值不会跟随
    myHash.key1
    中的更改

    首先,您需要使用关键字
    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
    

    使用函数。键2的ie应该是
    function(){return myHash.key1*7;}
    @r3wt这是个好主意,但这会让我使用()访问这些键的值,而不是使用它们访问其他键的值。所以,如果我想迭代散列,那就不容易了。除非我把一切都变成函数。有什么想法吗?@ OLAVISAU,你不能在文字定义的中间访问另一个密钥?变量
    myHash
    尚未设置,并且
    this
    也未设置为对象。因此,您无法从文本定义中引用对象的其他键。如果你要在字面定义中这样做,你必须使用函数的属性(常规函数或getter)。是啊…只是发生了一些奇怪的事情,我第一次尝试时它在控制台中工作,然后我测试了你的一个示例,然后没有,我一定错过了什么,我知道我现在犯了什么错误,我首先尝试使用它,它创建了一个obj,然后第二次使用该对象的var,您确实是对的。您可能想使用
    object.defineProperties
    。我认为getter是我最好的选择。因为函数的样式是:for(myHash中的var key)console.log(myHash[key]);无论它是否是函数,都会起作用。关于性能(速度)有什么想法吗?@AnthonyN我还没有对getter和静态属性进行性能比较。你可以在你最喜欢的浏览器中很快自己做一个。请记住,getter需要IE9或更高版本。
    您的示例中的.key1
    将是
    未定义的
    ,而不是引用初始值5。