在我的代码中。我有这样的界面。
interface MyFlag {
flag1: boolean,
flag2: boolean
}
在我的代码中我这样做。
let myFlag: MyFlag = {"flag1":true, "flag2": true};
let dummy = myFlag;
console.log("dummy: " + JSON.stringify(dummy));
myFlag = {"flag1": false, "flag2": false};
console.log("dummy2 : " + JSON.stringify(dummy));
以下是我的日志结果:
dummy: {"flag1":true, "flag2": true};
dummy2 : {"flag1":false, "flag2": false};
我无法理解的是,如何来虚拟"我改变myFlag时正在改变这个值。
我的问题是"有没有办法让“假”'保持之前指定的值。我的猜测是因为它是一个界面。
帮助表示赞赏。
干杯和问候,
SD
答案 0 :(得分:0)
将新对象分配给我无法理解的是,当我改变myFlag时,“虚拟”是如何改变价值的。
dummy
时, myFlag
不应该更改,但是当您更改myFlag
的内部状态时,它应该会发生变化。
以下是您发布但已转换为JavaScript的代码。在代码中,您要将新对象分配给myFlag
,而dummy
的值不会更改。 (这与您在答案中报告的行为不同。)
var myFlag = {
"flag1": true,
"flag2": true
};
var dummy = myFlag;
console.log("dummy: " + JSON.stringify(dummy));
myFlag = { "flag1": false, "flag2": false };
console.log("dummy2 : " + JSON.stringify(dummy));
// dummy: {"flag1":true,"flag2":true}
// dummy2 : {"flag1":true,"flag2":true}
您可能正在经历1.更改变量引用的对象的状态和2.更改变量包含的引用的值之间的区别。这是一个说明性的例子:
let foo = {
value: "first"
};
// at this point, foo and bar hold references to the same object
let bar = foo;
console.log(foo.value + " " + bar.value); // first first
// here, we are changing the internal state of that object
// both variables change
foo.value = "second";
console.log(foo.value + " " + bar.value); // second second
// here, we are changing the value of the reference that foo contians
// at this point, foo and bar hold references to different objects
foo = {
value: "third"
};
console.log(foo.value + " " + bar.value); // third second
// here, we are changing the internal state of bar's object
// which has no impact on the internal state of foo's object
bar.value = "fourth";
console.log(foo.value + " " + bar.value); // third fourth