thisの方向を変える方法call()とappy()とbind()
1309 ワード
call()とappy()
- この二つの方法はいずれも関数オブジェクトの方法であり、関数オブジェクトによる呼び出しが必要です.
- 関数に対してコール()を呼び出すと、アプリ()は関数を呼び出して実行します.
- コールコールコール()とappy()は、オブジェクトを最初のパラメータに指定できます.
このオブジェクトは関数実行時のthisとなります.
- call()メソッドは、実参をオブジェクトの後に順次渡すことができます.
- apply()方法は、1つの配列に実装を一括して転送する必要がある.
ビッド()
Function.prototype.bind(obj)
関数内のthisをobjとして結びつけ、関数を返します.メソッドはコールと同じです.
タイマーの中でthisはwindowを指します.thisの方向を変えるなら、bind()しか使えません.すぐに関数を実行しないからです.
コール()やアプリ()を使うとすぐに関数が呼び出されます.
call()/appy()/bind()の3つの違い
コール()/appy()はすぐに関数を呼び出します.
bind()は関数を返します.
-thisの場合:
1.関数で呼び出した場合、thisはいつまでもwindowです.
2.メソッドで呼び出した場合、thisは呼び出し方法の対象となります.
3.コンストラクタとして呼び出されたとき、thisは新しく作成されたオブジェクトです.
4.コールとアプリを使って呼び出した場合、thisは指定の対象です.
function fun(a, b) {
console.log("a = " + a);
console.log("b = " + b);
//alert(this);
}
var obj = {
name: "obj",
sayName: function() {
alert(this.name);
}
};
var obj2 = {
name: 'obj2'
};
function foo(data){
console.log(this,data)
}
foo.bind(obj,33)();
setTimeout(function() {
console.log(this)
}.bind(obj), 1000);
//fun.call(obj,2,3);
fun.apply(obj, [2, 3]);
obj.sayName.apply(obj2) // obj2