2016-06-22 9 views
-2

私は参考までに渡すことに関して質問があります。特に、私はwfをwordFormUpdateSubmitに渡しています。.forEachから渡すときにオブジェクト参照を失うのはなぜですか?

  • 私はこれを行う:wf = response.data;私はこれを行うと、それはword.wordForms

  • には何も変わりません:self.word.wordForms[key] = response.data;それは正しくword.wordForms

にWFの内容を変更します

私の質問はなぜ参照渡しではないのですが、なぜ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分後に回答を受け入れます。私の問題を解決しました。 –

関連する問題