1. call()
* call(this,a1,a2,a3,...)
* call方法湖雹,可以指定函數內部this的指向(即函數執(zhí)行時所在的作用域),然后在所指定的作用域中曙搬,調用該函數摔吏。
call的第一個參數就是this所要指向的那個對象,后面的參數則是函數調用時所需的參數纵装。
? ? ? function add(a, b) {
? ? ? return a + b;
? ? ? }
? ? ? add.call(this, 1, 2)? // 3
例:
? ? ? var n =111;
? ? ? var x = { n: 222 };
? ? ? function f() {
? ? ? console.log(this.n);
? ? ? }
? ? ? f(x) //111
? ? ? f.call(x)? //222
? 2. apply
* 與call類似征讲,改變this指向,再調用函數
* 區(qū)別: 接收一個數組作為函數執(zhí)行時的參數
* func.apply(this,[a1,a2,a2,a3,...])
? ? ? var a = { n: 2 };
? ? ? function f(x,y) {
? ? ? return x + y* this.n ;
? ? ? }
? ? ? f.call(a,1,2)? //5?
? ? ? f.apply(a,[1,2])? // 5
?3. bind()
* bind 方法用于將函數體內的 this 綁定到某個對象搂擦,然后返回一個新函數稳诚。
* bind 與 call 類似哗脖,接受參數相似瀑踢。但是bind生成一個新函數扳还,call直接調用
? ? ? var add = function (x, y) {
? ? ? ? return x * this.m + y * this.n;
? ? ? }
? ? ? var obj = {
? ? ? ? m: 2,
? ? ? ? n: 2
? ? ? };
? ? ? var xxx = add;
? ? ? xxx.call(obj,1,2)? //6
? ? ? var yyy = add;
? ? ? yyy.apply(obj,[1,2])? //6
? ? ? var Add= add.bind(obj);? //此時改變 this 指向了obj對象,生成一個函數
? ? ? Add(1,2)? ? //6? ? ?