2017-08-02 42 views
1

在我的代码中。我有这样的界面。Typescript Interface Assignment

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

+2

'dummy'只是另一个参考指向相同的对象'myFlag'。它与接口无关。 –

+0

当您分配dummy = myFlag时,它们都引用相同的对象。因此,对于同一个对象,您有一个具有两个引用变量的对象。您需要复制myFlag – jmw5598

+0

这里是一篇关于克隆打字稿中对象的文章https://stackoverflow.com/questions/28150967/typescript-cloning-object – jmw5598

回答

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}

你可能会遇到改变对象的哪个变量是指国家和2变化1的区别变量包含的引用的值。下面是一个说明性示例:

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