call apply bind的用途跟區別

2021-09-10 19:31:21 字數 934 閱讀 9739

output方法的執行看做是window.output的執行,屬於window的方法所以this是執行window。則this.variable獲取的是window.variable。這也就是為什麼列印全域性變數的原因。

例子:   

var outputagain =  

}outputagain.output();               //列印區域性變數

這裡的this也是執行呼叫output函式的物件outputagain,所以this指向outputagain的variable屬性。

var obj = ;

var a =  "window的a";

嚴格模式為undefined;

bind本身是"繫結"的意思。

例如:var  variable = "全域性邊量";

var obj2=

}obj2.output();                              //列印   區域性變數

var outputtest1 = obj2.output;

outputtest1();                               //列印  全域性變數

var outputtest2 = obj2.output.bind(obj2);

outputtest2();                              //列印  區域性變數

從例子中可以理解為outputtest2繫結在了obj2所以執行的時候列印區域性變數。

bind(引數1,arg1,arg2,...)            引數1 -- 新this物件    引數2 -- 引數列表

不同的是bind繫結後並不立即執行。而是需要再次將方法執行。

聊聊call apply bind的故事

實際上它們真正的樣子是這樣的 它們幾個的作用都是改變this的指向。bind 與另外兩個的區別則是前者改變this,不立即呼叫函式 而後者改變this,立即呼叫函式。以下例子在非嚴格模式下,注釋的是各個情況this的指向 let test test.foo test.foo.call null,1,...

寫給新人的call apply bind

語法 1 fun.call thisarg arg1 arg2 thisarg fun函式執行時指定的this值,可能的值為 例如 123 456functiona functionb a.call b functionb 經常會看到這種使用情況 123 45function list list 1...

理解 call, apply, bind 的用法

call 方法使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫乙個函式。function list list 1,2,3,4,5 1 陣列的所有方法都是掛在array的prototype上的,如圖 而類陣列物件本身是沒有這些方法的,當然也無法呼叫 那麼想在一些物件上呼叫這個物件本身沒有的方法...