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