ぼちぼち技術開発 主にjs,java等
このようなコードを実行してみて下さい。
var Example = function() {
this.s = "hoge";
this.object = {
func: function() {
console.log(this.s);
};
};
}
new Example().object.func();
残念ながら、これでは"hoge"は出力されません。nullが出力されてしまいます。なぜでしょうか。
"this.s"を"this"に置き換えてみると、その理由は良くわかります。func内でのthisはExampleオブジェクトではなく、代わりにその中のobjectプロパティーを指しています。
ここでbindの出番です。関数宣言の後に
".bind(this)"
を付け足してみます。
var Example = function() {
this.s = "hoge";
this.object = {
func: function() {
console.log(this.s);
}.bind(this);
};
}
new Example().object.func();
これを実行してみると、"hoge"が出力されます。なぜこうなったのでしょうか。まず、何かしらの関数のbindメソッドを引数1つで実行すると、新しい別の関数が返って来ます。その関数の中では、thisは必ずbindメソッドの第1引数になります。そのため、func内でのthisはExampleオブジェクトになったのです。