call()
方法調用一個函數, 其具備一個指定的 this
值和分別地提供的參數(參數的列表)。javascript
注意:該方法的做用和 `apply()` 方法相似,只有一個區別,就是 `call()` 方法接受的是若干個參數的列表,而 `apply()` 方法接受的是一個包含多個參數的數組。 java
語法:數組
fun.call(thisArg[, arg1[, arg2[, ...]]])
複製代碼
參數:app
thisArg
dom
arg1, arg2, ...
函數
apply()
方法調用一個函數, 其具備一個指定的 this
值,以及做爲一個數組(或相似數組的對象)提供的參數。ui
注意:該方法的做用和 `call()` 方法相似,只有一個區別,就是 `call()` 方法接受的是若干個參數的列表,而 `apply()` 方法接受的是一個包含多個參數的數組。 this
語法:spa
fun.apply(thisArg, [argsArray])
複製代碼
參數:prototype
thisArg
argsArray
apply()
與 call()
很是類似,不一樣之處在於提供參數的方式。 apply()
使用參數數組而不是一組參數列表。例如:
fun.apply(this, ['eat', 'bananas'])
複製代碼
==call 與apply的區別:== apply、call 的區別
對於 apply、call 兩者而言,做用徹底同樣,只是接受參數的方式不太同樣。例如,有一個函數定義以下:
var func = function(arg1, arg2) {
};
複製代碼
就能夠經過以下方式來調用:
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2])
複製代碼
其中 this 是你想指定的上下文,他能夠是任何一個 JavaScript 對象(JavaScript 中一切皆對象),call 須要把參數按順序傳遞進去,而 apply 則是把參數放在數組裏。
bind() 函數會建立一個新函數(稱爲綁定函數),新函數與被調函數(綁定函數的目標函數)具備相同的函數體(在 ECMAScript 5 規範中內置的call屬性)。 當目標函數被調用時 this 值綁定到 bind() 的第一個參數,該參數不能被重寫。綁定函數被調用時,bind() 也接受預設的參數提供給原函數。 一個綁定函數也能使用new操做符建立對象:這種行爲就像把原函數當成構造器。提供的 this 值被忽略,同時調用時的參數被提供給模擬函數。
語法:
fun.bind(thisArg[, arg1[, arg2[, ...]]])
複製代碼
參數:
thisArg
arg1, arg2, ...
返回值:
返回由指定的this值和初始化參數改造的原函數拷貝。
示例:
function LateBloomer() {
this.petalCount = Math.ceil(Math.random() * 12) + 1;
}
// Declare bloom after a delay of 1 second
LateBloomer.prototype.bloom = function() {
window.setTimeout(this.declare.bind(this), 1000);
};
LateBloomer.prototype.declare = function() {
console.log('I am a beautiful flower with ' +
this.petalCount + ' petals!');
};
var flower = new LateBloomer();
flower.bloom(); // 一秒鐘後, 調用'declare'方法
複製代碼
call 和 apply 特性同樣
this
的指向null
或者 undefined
則內部 this 指向 windowbind