call apply bind用法區別

2022-07-27 11:45:13 字數 1576 閱讀 5214

call

call()方法呼叫乙個函式, 其具有乙個指定的this值和分別地提供的引數(引數的列表)。

方法類似,只有乙個區別,就是call()方法接受的是乙個包含多個引數的陣列。

語法:

fun.call(thisarg[, arg1[, arg2[, ...]]])

引數:

arg1, arg2, ...

方法呼叫乙個函式, 其具有乙個指定的this值,以及作為乙個陣列(或類似陣列的物件)提供的引數。

注意:該方法的作用和call()方法類似,只有乙個區別,就是call()方法接受的是乙個包含多個引數的陣列。

語法:引數:

call()使用引數陣列而不是一組引數列表。例如:

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 = new

latebloomer();

flower.bloom();

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

bind

理解 call, apply, bind 的用法

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

call apply bind 方法用法測試

call 1 use strict function test xx,yy let a 呼叫test方法,將 a 放到方法裡當作 this。所以裡列印a才會有值的。test.call a,10,20 console.log a 3 use strict function test xx,yy let...

call apply bind的用法以及區別

通過 可以看出區別 var name window var age 10 function fun1 name var person fun1.call person,小明 對於bind來說,用法更加的靈活 var fun2 fun1.bind person,小明 fun2 fun1 看一下在控制台...