Вы не можете ссылаться на другие ключи объекта в пределах литерального определения. Варианты для установки ключа на основе других ключей или других значения в пределах объекта являются:
Используйте функцию геттера для ключа, который может возвращать значение, основанное на других свойствах.
Используйте регулярную функцию для ключа, который может возвращать значение, основанное на других свойствах.
Назначьте ключ/значение за пределами литерального определения, где вы можете назначить статическое значение на основе других ключей/свойств.
Вот примеры каждого из этих вариантов:
// 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
.
использовать функции. т.е. для key2 будет 'function() {return myHash.key1 * 7; } ' – r3wt
@ r3wt Это хорошая идея, но это заставит меня использовать() для доступа к значениям этих ключей и не использовать их для доступа к значениям других. Так что если я wana итерации по хешу, это было бы легко. Если я не переключу все на функции. Есть идеи по этому поводу? –