封裝函數 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 的值,可是後面接受的是不定參數,而再也不是一個數組,也就是說你能夠像平時給函數傳參那樣把這些參數一個一個傳遞。指針