z を設定すると、y が評価されます。その時点で 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
ある変数を別の変数の値に依存させたい場合、それらに新しい値を割り当てることはできません。ゲッターとセッター関数を使用する必要があります。
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
get および set で bfavaretto の構文を使用すると、新しい値を割り当てることができますが、内部的に JavaScript は getter および setter 関数を使用します。これは、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