我可以在另一个变量中更改一个javascript变量吗
Can I change a javascript variable within another variable?
这是我的问题。点击增量按钮后,y等于7,但z保持等于7,而不是变为8。为什么javascript变量不在其他变量中更新?这个问题有解决办法吗?我确信javascript的一个基本特性我没有理解,但我似乎无法理解。
<body>
<script>
var y=6;
var z=1+y;
</script>
<button onclick="y++">Increment</button>
<button onclick="alert(y)">What is y?</button>
<button onclick="alert(z)">What is z?</button>
</body>
变量z
的值是在您将其分配给变量时计算的:
var z=1+y;
如果你想改变它,你必须手动更新:
<button onclick="z=++y+1">Increment</button>
我相信大多数计算机语言都是这样的。
在JavaScript和其他语言中,您可以使用"getters"answers"setters"来实现您想要的内容,但代码会变得更加复杂。判断你是否真的认为有必要:
<body>
<script>
var vals = {
_y : 0,
z : 0,
set y(val) {
this._y = val;
},
get y() {
this.z = this._y + 1
return this._y;
}
}
vals.y = 6;
vals.z = 1 + vals.y;
</script>
<button onclick="vals.y++">Increment</button>
<button onclick="alert(vals.y)">What is y?</button>
<button onclick="alert(vals.z)">What is z?</button>
</body>
http://jsbin.com/udediy/1/edit
另一个更简单的解决方案是只使用一个函数。这对你举的例子来说会很好:
<body>
<script>
var y=6;
var z = function() {
return 1+y;
}
</script>
<button onclick="y++">Increment</button>
<button onclick="alert(y)">What is y?</button>
<button onclick="alert(z())">What is z?</button>
</body>
http://jsbin.com/ojorax/1/edit
y在设置z时进行求值。此时y为6,因此z为7。当你增加y时,z不会被重新评估(正如你所发现的)。
y=1;
z=++y;//increment y and assign the value to z
// z will be 2;
z=y++;//set z to the value of y and then increment y
// z is now 2 and y is 3
如果你想让一个变量依赖于另一个变量的值,你不能只给它们分配新的值。您必须使用getter和setter函数:
var myObj={
y:0,
x:0,
setY:function (value){
this.y=value;
this.x=value+1;
},
setX:function (value){
this.x=value;
this.y=value-1;
}
}
myObj.setY(4);
console.log(myObj.x);//=5
myObj.y=2;//breaks setting x, you have to use setters
console.log(myObj.x);//=5
如您所见,myObj.y=2
行中断设置z,因此您无法在不中断设置的情况下为myObj.y或myObj.z赋值。
为了防止这种情况发生,你必须将x和y设为私有。在JavaScript中,您可以使用闭包来模拟私有变量。
对愚蠢代码的警告:如果您计划创建对象的多个实例,请使用构造函数函数,并使用代码约定(如_privateVar
)而不是真正的私有变量,因为JS不支持它,除非您计划不使用原型
var myObj=(function(){
var x=0;// x and y only exist in the funciton body
var y=0;// you cannot access them in myObj.x or .y
return{
setX:function(value){
//maybe check if value is a number here
x=value;
y=value-1;
},
setY:function(value){
//maybe check if value is a number here
y=value;
x=value+1;
},
getX:function(){
return x;
},
getY:function(){
return y;
}
}
})();
myObj.setX(6);
console.log(myObj.getY());//logs 5
myObj.y=22;
console.log(myObj.getY());//still logs 5
使用bfavaretto的语法和get和set,您可以分配新的值,但在内部JavaScript将使用getters和setters函数。这在IE8及以下版本的旧浏览器中不起作用。
var myObj={
_y:0,
_x:0,
set y(value){
this._y=value;
this._x=value+1;
},
get y(){
return this._y;
},
set x(value){
this._x=value;
this._y=value-1;
},
get x(){
return this._x
}
}
myObj.x=4;
console.log(myObj.y);//=3
一旦分配了z = 1 + y
z的值,就会引用不同的位置,并且z
和y
之间没有进一步的关系
一种方法是将变量包装在对象中,该对象通过引用而不是值传递:
var obj = { y : 6 };
var obj_2 = obj;
alert(obj.y); //6
alert(obj_2.y); // 6
obj.y++;
alert(obj.y); // 7
alert(obj_2.y); // 7`
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 导航到特定事件的另一个变量页面
- 在另一个函数中使用变量this
- 我可以在Javascript/jQuery中使用一个变量作为键吗
- 使用mongodb更新中的一个变量
- 为什么window.open不打开一个以变量形式给出的链接
- 将节点数据分配给另一个变量jstree
- 如何将变量传递到另一个js文件
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 将会话变量从一个页面传递到另一个页面
- Javascript:在激发函数后返回一个变量以供使用
- 替换另一个变量对象中的变量值
- 什么'它的意思是当一个变量位于括号外时
- 这在JavaScript中是一个好的变量名吗
- 可以't将sessionStorage设置为Javascript中的一个变量
- 如何在javascript中给变量一个随机值
- 在不同的.js文件之间传递变量;一个是在iframe内
- Console.log(变量);VS console.log([变量]);/一个提供信息,另一个没有
- 是否可以给变量一个默认值