私はbind()関数を使っていましたが、私は現在認識していない状況に遭遇しました。 誰かが私に与えることができ、この例がこのように機能する理由を説明できますか? bind関数に渡されたインラインオブジェクトは、最初の繰り返しでのみ初期化され、参照が保持されているようです。 私はあなたが正しい方向に私を指すことができれば、私は.bind()
の最初の引数は、コンテキストでJavascript Function.prototype.bind()インラインオブジェクト定義
class test {
addLetter(element) {
console.log('addLetter', this.str);
this.str += element + ',';
}
foo() {
let arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
arr.forEach(this.addLetter.bind({
str: ''
}));
}
}
let a = new test();
a.foo();
OUTPUT:
addLetter
addLetter a,
addLetter a,b,
addLetter a,b,c,
addLetter a,b,c,d,
addLetter a,b,c,d,e,
addLetter a,b,c,d,e,f,
「このキーワードはどのように機能しますか?」(https://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) – Erazihel
あなたのコードは、 let cb = this.addLetter.bind({...}); arr.forEach(cb); ' - はい、バインドされたオブジェクトを1つだけ持つ*コールバックを作成しています。 – deceze
確かに、私のエラーはforEachを通常のループとして考えていました、ありがとうございます。 –