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