call,apply和bind的用法及區別

2021-09-17 18:13:04 字數 2242 閱讀 4034

call

function

fn(x,y)

console.

log(x+y)

;//11

}var obj =

//語法:

fn.call

(obj,2,

9)

應用

var obj =

;array.prototype.push.

call

(obj,30)

console.

log(obj)

call

(obj,0,

2)console.

log(obj)

//

var obj1 =

console.

log(obj1.

tostring()

);//[object object]

var arr =[2

,9];

console.

log(arr.

tostring()

);//2,9

console.

log(object.prototype.tostring.

call

(arr));

//[object array]

function

fn(x,y)

var obj =

fn.(obj,[2

,9])

var arr =[1

,2,3

,4,5

];console.

log(math.

max(arr));

//nan

console.

log(math.max.

(math,arr)

)//5

console.log.

(console,arr)

//1 2 3 4 5

bind

bind() 函式會建立乙個新函式(稱為繫結函式),新函式與被調函式(繫結函式的目標函式)具有相同的函式體(在 ecmascript 5 規範中內建的call屬性)。

當目標函式被呼叫時 this 值繫結到 bind() 的第乙個引數,該引數不能被重寫。繫結函式被呼叫時,bind() 也接受預設的引數提供給原函式。

乙個繫結函式也能使用new操作符建立物件:這種行為就像把原函式當成構造器。提供的 this 值被忽略,同時呼叫時的引數被提供給模擬函式。

語法:

fun.

bind

(thisarg[

, arg1[

, arg2[

,...]]

])

引數:

arg1, arg2, …

返回值:

返回由指定的this值和初始化引數改造的原函式拷貝。

示例1:

this

.x =9;

var module =};

module.

getx()

;// 返回 81

var retrievex = module.getx;

retrievex()

;// 返回 9, 在這種情況下,"this"指向全域性作用域

// 建立乙個新函式,將"this"繫結到module物件

// 新手可能會被全域性的x變數和module裡的屬性x所迷惑

var boundgetx = retrievex.

bind

(module)

;boundgetx()

;// 返回 81

示例2:

function

latebloomer()

// declare bloom after a delay of 1 second

latebloomer.prototype.

bloom

=function()

;latebloomer.prototype.

declare

=function()

;var flower =

newlatebloomer()

;flower.

bloom()

;// 一秒鐘後, 呼叫'declare'方法

小結

bind

簡單的說

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,...

call apply和bind方法詳解

call方法 使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫函式。var obj function getname name getname.call obj mei var obj function getname name,age 這兩種方法的用途很多,下面我就舉幾個例子。1.基本用法...