2017-08-02 30 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