.call .apply .bind

apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
参数:
apply(thisArg, agrsArray)
thisArg:之执行函数时使用的this值,若指定为null / undefined 会被自动替换为指向全局对象,浏览器下就是window对象,同时值为原始值(数组,字符串,布尔值)的this会指向该原始值的包装对象
argsArray:一个数组或者类数组对象,其中的数组元素将作为单独的参数传给func函数,如果参数的值为null / undefined,则表示不需要传入任何参数
注意:call()方法的作用和 apply() 方法类似,只有一个区别,就是 call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。

描述

在调用一个存在的函数时,你可以为其指定一个 this 对象。 this 指当前对象,也就是正在调用这个函数的对象。 使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。

apply[call()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call "call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。") 非常相似,不同之处在于提供参数的方式。apply 使用参数数组而不是一组参数列表(原文:a named set of parameters)。apply可以使用数组字面量(array literal),如 *fun*.apply(this, ['eat', 'bananas']),或数组对象, 如 *fun*.apply(this, new Array('eat', 'bananas'))

你也可以使用 arguments 对象作为 argsArray 参数。 arguments 是一个函数的局部变量。 它可以被用作被调用对象的所有未指定的参数。 这样,你在使用apply函数的时候就不需要知道被调用对象的所有参数。 你可以使用arguments来把所有的参数传递给被调用对象。 被调用对象接下来就负责处理这些参数。

从 ECMAScript 第5版开始,可以使用任何种类的类数组对象,就是说只要有一个 length 属性和[0...length) 范围的整数属性。例如现在可以使用 NodeList 或一个自己定义的类似 {'length': 2, '0': 'eat', '1': 'bananas'} 形式的对象。

需要注意:Chrome 14 以及 Internet Explorer 9 仍然不接受类数组对象。如果传入类数组对象,它们会抛出异常。

bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
功能一:创建一个函数,使这个函数不论怎么调用都用相同的this值。
功能二:使一个函数拥有初始的参数

你可能感兴趣的:(.call .apply .bind)