今回は bind()
に関して理解を深めたいと思います。
bind() について。
bind() メソッドは、呼び出された際に this キーワードに指定された値が設定される新しい関数を生成します。
なるほど、thisを指定するんだな、新しい関数を作るんだな
というのがわかりました。
thisの中身を見ていく
bindはthisには深い関係にありますので、まずは this
の中身について見ていきましょう。
const testFunk = {
name: '太郎',
onClick() {
console.log(this) // これな何になる?
console.log(this.name + ' clicked');
}
};
testFunk.onClick();
実行すると、このような結果が得られました。
※choromeの開発者ツールで実行しています
this
が参照しているオブジェクトはtestFunk
だとわかりました。
[ここがthisの対象].showName();
続いて、showName
を追加し、そちらから実行してみます。
const testFunk = {
name: '太郎',
onClick() {
console.log(this)
console.log(this.name + ' clicked');
},
showName: { // 追加
name: '二郎',
onClick() {
console.log(this)
console.log(this.content + ' clicked your button')
}
}
};
testFunk.showName.onClick();
this
が参照しているオブジェクトは、showName
だとわかりました。
[testFunk].[ここがthisの対象].showName();
続いて、メソッドを別の変数に格納した
場合はどうなるでしょうか.
const testFunk = {
name: '太郎',
onClick() {
console.log(this)
console.log(this.name + ' clicked');
}
};
const animal = testFunk.onClick; // animalに格納する
animal();
this
が グローバルオブジェクト(window)
になってしまいました。
this.name
はグローバルオブジェクト
に存在しないので undefined
になっています。
window.onClick();
このことから、this
は実行する方法によって変わることがわかりました。
ここまで、this
の理解が少しは深まったかと思います。
bind()
やっとbind
のお話です。
bind
の説明を思い出してみましょう。
this キーワードに指定された値が設定される新しい関数を生成します。
つまり何をthisとおくか指定する
ことができます。
先ほどグローバルがthis
になってしまった例に、bind
を用いてthis
を操ってみます。
const testFunk = {
name: '太郎',
onClick() {
console.log(this)
console.log(this.name + ' clicked');
}
};
const animal = testFunk.onClick.bind(testFunk); // thisはtestFunkにしてくれ
animal();
やりました!
this
がグローバル
になっていません。testFunk
のままにすることができました!
続いて、bind
にshowName
を入れてみます。
const testFunk = {
name: '太郎',
onClick() {
console.log(this)
console.log(this.name + ' clicked');
}
}
const showName = {
name: '二郎',
};
const hoge = testFunk.onClick.bind(showName);
hoge();
showName
を this
とすることができました!
長くなってきたのでいったんここで切りますね!
次回は bindをアロー関数で使用したらどうなるのか
を書いていきます。