立即呼叫fun,同時將fun函式原來的this指向傳入的新context物件,實現同乙個方法在不同物件上重複使用。
context:傳入的物件,替代fun函式原來的this;
argsarray:乙個陣列或者類陣列物件,其中的陣列引數會被展開作為單獨的實參傳給 fun 函式,需要注意引數的順序。
fun.call(context,[arg1],[arg2],[…])
使用:
math.max() //只接收單獨的引數,通過下面的方法可以在陣列上面使用max方法:
會將array陣列引數展開成單獨的引數再傳入
array.prototype.slice.call(arguments); //
在類素組物件上使用slice方法
function
isarray(obj)
//驗證是否是陣列
fun.bind(context,[arg1],[arg2],[…])
arg1:要傳遞到新函式的引數列表
返回乙個函式供後續呼叫,其函式體和原函式fun一樣
,但新函式的this永遠
指向新傳入的context物件。新函式會具有bind方法指定的初始引數arg1/arg2...,後續呼叫新函式時的實參要往已有引數的後面排。
//原來的函式有4個引數
var displayargs = function
(val1, val2, val3, val4)
var emptyobject ={};
//生成新函式時bind方法指定了2個引數,則新函式會帶著這個兩個實參
var displayargs2 = displayargs.bind(emptyobject, 12, "a");
//呼叫時傳入另2個引數,要在bind方法傳入的2個實參後面
displayargs2("b", "c");
//output: 12 a b c
事件處理函式中使用bind:
var obj =.bind(this)); //
使用bind方法繫結this
}}
使用bind()方法改寫slice()方法:
var _slice =array.prototype.slice;var slice =function.prototype.call.bind(_slice);
slice(…);
bind()相容ie5~ie8處理
if (!function.prototype.bind)bindargs = array.prototype.slice.call(arguments, 1); // 繫結函式時傳入的引數
var fnop = function () {};
var fbound = function ()
// 將新物件設為原函式的例項,即新物件 instanceof 原函式為 true
fnop.prototype = this.prototype;
fbound.prototype = new fnop();
return fbound;
}}
一般情況下settimeout()的this指向window或global物件。當使用類的方法時需要this指向類例項,就可以使用bind()將this繫結到呼叫物件,而不用傳入self方式傳入this。
this
this物件是在函式執行時基於函式的執行環境繫結的:在全域性函式中,this等於window,而當函式被當作某個物件的方法呼叫時,this等於那個物件。
/*例1*/
function
foo()
var obj2 =;
var obj1 =;
obj1.obj2.foo();
//42;當foo函式被呼叫時,其本身是歸obj2所擁有
/*例2
*/function
foo()
var obj =;
var bar = obj.foo; //
bar引用foo函式本身
var a = "global"; //
全域性物件的屬性
bar(); //
"global" ;
在乙個html dom事件處理程式裡面,this始終指向這個處理程式被所繫結到的dom節點。
apply call bind學習和總結
1 call方法 語法 fun.call thisarg,arg1,arg2,call 方法在使用乙個指定的this值和若干個指定的引數值的前提下呼叫某個函式或方法。當呼叫乙個函式時,可以賦值乙個不同的 this 物件。this 引用當前物件,即 call 方法的第乙個引數。需要注意的是,指定的th...
apply call bind 使用總結
參考 語法 語法 fun.call thisarg arg1 arg2 var a var b a.fn 接受的是乙個陣列var a var b a.fn 接受的是引數 b.call a,1,2 3var a var b a.fn b.bind a,1,2 以上code我們會發現並沒有輸出.bind...
apply,call,bind個人總結
首先他們是用來改變呼叫方法中this的指向的,而且他們都是function的prototype。分別為 function.prototype.call function.prototype.bind 引數1 thisarg 物件也就是需要指向this的物件 引數2 argsarray 陣列 會按對應...