我只想知道如何在同一个哈希中访问另一个键的值。 从哈希里面。不是通过做myHash.key2 = myHash.key1 ....; 我的意思是一种做法:
var myHash = {
key1: 5,
key2: key1 * 7,
key3: true,
key4: (key3)? "yes" : "no"
};
PS:这只是实际代码的简化版本,实际上每个键都有一些复杂的操作。值而不是简单的数字或bools。
答案 0 :(得分:2)
您无法在文字定义中引用对象上的其他键。基于对象中的其他键或其他值设置键的选项包括:
对可以根据其他属性返回值的键使用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
中的更改。
答案 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