中級 › メソッドを変数に代入・受け渡しするとthisが失われる › パターン2
メソッドを変数に代入・受け渡しするとthisが失われる
オブジェクトのメソッドを変数に代入したり、別の関数に渡して呼び出したりすると、呼び出し時にレシーバーの情報が失われ、thisがオブジェクトを指さなくなります。
1 const logger = { prefix: "[LOG]", write(msg) { return this.prefix + " " + msg; } }; 2 function run(fn) { return fn("hi"); } 3 console.log(run(_________________________)); ^
出力: undefined hi期待: [LOG] hi (エラーにはなりません)
空欄を埋めて実行を通す
logger.writeを関数として渡すと、run内でfn("hi")と呼ばれた時点でレシーバーの情報が失われます。bindでthisをloggerに固定してから渡す必要があります。
次の問題