jsにおけるthisバインドの5つの方法
823 ワード
本文は『javascriptを知らない』からまとめた.
1デフォルトバインド
デフォルトバインドとは、関数を直接呼び出し、関数の前に修飾がない場合、デフォルトでthisを現在の関数コンテキスト環境にバインドすることです.
2暗黙的バインド
これをコンテキストオブジェクト、例えばobjにバインドする.foo()はfoo関数のthisがobjというオブジェクトを指す
暗黙的なバインドは、関数に最も近いオブジェクト、例えばobj 1にthisをバインドすることに注意してください.obj2.foo(),foo関数のthisはobj 2を指す
3明示的なバインド
callによりapply関数はthisを指定したオブジェクトにバインドする.
4 newバインド
newでオブジェクトを作成すると、次の操作が自動的に実行されます.
1新しいオブジェクトを作成
2この新しいオブジェクトを[[プロトタイプ]]接続する
3 thisをこの新しいオブジェクトにバインド
4他のオブジェクトが返されない場合は、新しいオブジェクトが返されます.
3つ目はnewバインドになります
二newバインドと明示的バインドの優先度
このような関数があれば
上記の退職では、fooのthisをobjに明示的にバインドし、newバインドで新しいオブジェクトにバインドします.出力結果から、newバインドの優先度は明示的なバインドよりも高くなります.
1デフォルトバインド
デフォルトバインドとは、関数を直接呼び出し、関数の前に修飾がない場合、デフォルトでthisを現在の関数コンテキスト環境にバインドすることです.
2暗黙的バインド
これをコンテキストオブジェクト、例えばobjにバインドする.foo()はfoo関数のthisがobjというオブジェクトを指す
暗黙的なバインドは、関数に最も近いオブジェクト、例えばobj 1にthisをバインドすることに注意してください.obj2.foo(),foo関数のthisはobj 2を指す
3明示的なバインド
callによりapply関数はthisを指定したオブジェクトにバインドする.
4 newバインド
newでオブジェクトを作成すると、次の操作が自動的に実行されます.
1新しいオブジェクトを作成
2この新しいオブジェクトを[[プロトタイプ]]接続する
3 thisをこの新しいオブジェクトにバインド
4他のオブジェクトが返されない場合は、新しいオブジェクトが返されます.
3つ目はnewバインドになります
二newバインドと明示的バインドの優先度
このような関数があれば
var foo = function (val){
this.a = val
}
var bar = foo.bind(obj)
var baz = new bar(2)
console.log(baz.a) // 2
上記の退職では、fooのthisをobjに明示的にバインドし、newバインドで新しいオブジェクトにバインドします.出力結果から、newバインドの優先度は明示的なバインドよりも高くなります.