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