JavaScript 修改this指針

題目

封裝函數 f,使 f 的 this 指向指定的對象 。javascript

輸入例子

bindThis(function(a, b) {
    return this.test + a + b;
}, {test: 1})(2, 3);

輸出例子

6

分析

該題目的要求是:封裝一個函數bindThis,該函數有兩個參數,第一個參數是一個內部有使用this指針的函數f,第二個參數是一個對象obj,執行bindThis以後,返回一個函數,該函數裏面的this就被綁定到obj上面。java

function f(a, b) {
    return this.test + a + b;
}

function bindThis(f, obj) {
    //你實現的部分
}

//執行函數
var a = bindThis(f,{test:1});
a(2,3);

解決方法

javascript的三劍客:bind apply call數組

一、解決方法一:使用bind()app

function f(a, b) {
    return this.test + a + b;
}

function bindThis(f, obj) {
    //你實現的部分
    return f.bind(obj);
}

//執行函數
var a = bindThis(f,{test:1});
console.log(a(2,3));
console.log(f(2,3));
6
NaN

二、解決方法二:使用apply()函數

function bindThis(f, obj) {
    //你實現的部分
    return function () {
        return f.apply(obj, arguments);
    };
}

三、解決方法三:使用call()this

function bindThis(f, obj) {
    //你實現的部分
    return function (a,b) {
        return f.call(obj, a,b);
    };
}

call和apply基本的區別:參數不一樣。apply() 接收兩個參數,第一個是綁定 this 的值,第二個是一個參數數組。而 call() 呢,它的第一個參數也是綁定給 this 的值,可是後面接受的是不定參數,而再也不是一個數組,也就是說你能夠像平時給函數傳參那樣把這些參數一個一個傳遞。指針

相關文章
相關標籤/搜索