call方法:使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫函式。
var obj =
function getname(name)
getname.call(obj ," mei "); //
var obj =
function getname(name,age)
這兩種方法的用途很多,下面我就舉幾個例子。
// 1.基本用法
function add(a,b)
function sub(a,b)
alert(result1); //12
alert(result2); //8
/*call的用法*/
var result = add.call(sub,6,2); //8
// 2.方法的繼承
function person(food)
}function student(food)
humei.eat();
// 3.多重繼承
function sub()
}function add()
}function result()
var r = new result();
r.showsub(13,1); //12
r.showadd(13,1); //14
// 4. 利用math.max和math,min求得陣列的最大值、最小值
當this的值為null、undefined時,預設指向window。
bind方法,與call類似。區別在於bind的返回值是函式和接收引數列表的使用。
var obj =
function showname()
var hu = showname.bind(obj)
console.log(hu) // function ()
hu() // huxiangyan bind 方法不會立即執行,而是返回乙個改變了上下文 this 後的函式。而原函式 showname 中的 this 並沒有被改變,依舊指向全域性物件 window。
function fn(a, b, c)
var fn1 = fn.bind(null, 'dot');
fn('a', 'b', 'c'); // a b c
fn1('a', 'b', 'c'); // dot a b
fn1('b', 'c'); // dot b c
fn.call(null, 'dot'); // dot undefined undefined
// call 是把第二個及以後的引數作為 fn 方法的實參傳進去,而 fn1 方法的實參實則是在 bind 中引數的基礎上再往後排。
感覺對這三個方法清楚了很多,參考了幾篇博文。傳送門1
傳送門2
call apply和bind的原理
call 作用 call 方法就是使用乙個指定this值和若干個指定引數值的前提下呼叫摸個函式或方法。var foo function bar 如果不對this進行繫結執行bar 會返回undefined bar.call foo 1也就是說call 改變了this的指向,指向了foo 下面進行一下...
call apply和bind的用法
在改變this指向的時候,經常會把這三個方法混淆,下面就詳細的整理一下三者的用法和區別 var a var b b.sayname.call a,1,2,3 輸出 張三 6第乙個引數是改變 this 指向的物件 第二個引數必須是乙個陣列 使用後會自動執行 var a var b var arr 1,...
js中call,apply和bind方法
語法 任意函式.call 任意物件,引數1,引數2 特徵 call能呼叫函式,後面可傳入多個引數,用逗號隔開 3.價值 任意物件都能呼叫任意函式 功能 function fn a,b var obj2 fn.call obj2,你好 6 這樣就能為obj2新增乙個屬性abc,值為 你好6 原因是使用...