2016-06-22 23 views
-2

我有一個關於傳遞參考的問題。特別是我將wf傳遞給wordFormUpdateSubmit。當我從.forEach傳遞時,爲什麼我會丟失對象引用?

  • 當我這樣做:wf = response.data;它不會改變任何東西word.wordForms

  • 當我這樣做:self.word.wordForms[key] = response.data;它正確地更改WF的內容word.wordForms

我的問題是爲什麼它不通過引用傳遞,爲什麼wf = response.data;不起作用?

wordFormCheckAndUpdate =(): ng.IPromise<any> => { 
    var self = this; 
    var promises = []; 
    angular.forEach(self.word.wordForms, function (wf, key) { 
     var updatePromise = self.wordFormUpdateSubmit(wf, key); 
     promises.push(updatePromise);   
    }); 
    return self.$q.all(promises); 
}; 

    wordFormUpdateSubmit = (wf: IWordForm, key: number): ng.IPromise<any> => { 
    var self = this; 
    return self.$http({ 
     url: self.ac.dataServer + "/api/WordForm/Put", 
     method: "PUT", 
     data: wf 
    }) 
     .then(
     (any => { 
      // This does not correctly populate self.word.wordForms[0] 
      wf = response.data; 

      // This works 
      self.word.wordForms[key] = response.data; 


     }); 
    } 
+0

有一件事是肯定的:這是不是的JavaScript。 C#,也許? –

+0

@JanDvorak Typescript或Babel的類型系統都是JavaScript超集。 –

+0

@JeremyJStarcher ...和類型是從角? –

回答

2

JavaScript沒有傳遞引用,它有「call by sharing」。

如果給函數參數指定一個新值,它將不會對傳入該函數的原始值進行任何更改。它只會覆蓋參數。

這應該是你正在嘗試做一個可行的(和更清潔的)替代:

wordFormCheckAndUpdate =(): ng.IPromise<any> => { 
    var self = this; 

    return self.$q.all(self.word.wordForms.map((wf, key) => 
     self.wordFormUpdateSubmit(wf, key) 
    )) 
    .then(function (values) { 
     self.word.wordForms = values; 
    }); 
}; 

wordFormUpdateSubmit = (wf: IWordForm, key: number): ng.IPromise<any> => { 
    var self = this; 
    return self.$http({ 
     url: self.ac.dataServer + "/api/WordForm/Put", 
     method: "PUT", 
     data: wf 
    }) 
    .then(response => response.data); 
} 
+0

謝謝。將在10分鐘後接受答案。解決了我的問題。 –

相關問題