call apply和bind方法詳解

2021-09-24 19:36:45 字數 1547 閱讀 7108

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 原因是使用...