一般用來指定this的環境,在沒有學之前,通常會有這些問題。
var a =}var b = a.fn;
b(); //undefined
我們是想列印物件a裡面的user卻列印出來undefined是怎麼回事呢?如果我們直接執行a.fn()是可以的。
var a =}a.fn(); //追夢子
這裡能夠列印是因為,這裡的this指向的是函式a,那為什麼上面的不指向a?我們如果需要了解this的指向問題,請看徹底理解js中this的指向,不必硬背這篇文章。
雖然這種方法可以達到我們的目的,但是有時候我們不得不將這個物件儲存到另外的乙個變數中,那麼就可以通過以下方法。
1、call()
var a =}var b = a.fn;
b.call(a);
通過在call方法,給第乙個引數新增要把b新增到哪個環境中,簡單來說,this就會指向那個物件。
call方法除了第乙個引數以外還可以新增多個引數,如下:
var a =}var b = a.fn;
b.call(a,1,2);
var a =}var b = a.fn;
var a =}var b = a.fn;
或者
var a =}var b = a.fn;
var arr = [500,20];
var a =}}var b = a.fn;
3、bind()
先來說說它們的不同吧。
var a =}var b = a.fn;
b.bind(a);
var a =}var b = a.fn;
var c = b.bind(a);
console.log(c); //function()
那麼我們現在執行一下函式c看看,能不能列印出物件a裡面的user
var a =}var b = a.fn;
var c = b.bind(a);
c();
ok,同樣bind也可以有多個引數,並且引數可以執行的時候再次新增,但是要注意的是,引數是按照形參的順序進行的。
var a =}var b = a.fn;
var c = b.bind(a,10);
c(1,2);
call, apply, bind方法詳解
function a x,y var c a.call c,5,6 5 6 arguments 5,6 再看例子 function person age,male var person1 person.call person1,20,female person1 var person var per...
call apply bind方法詳解
var name window var newthis function showname info1,info2 showname a b 輸出 window a b 通過bind改變this指向 var newshowname showname.bind newthis,hello world ...
call apply bind 方法用法測試
call 1 use strict function test xx,yy let a 呼叫test方法,將 a 放到方法裡當作 this。所以裡列印a才會有值的。test.call a,10,20 console.log a 3 use strict function test xx,yy let...