1、每个函数都包含有非继承而来的方法:call()、apply() 。它们的作用都是在特定的作用域中调用函数,即设置函数体内 this 对象的值。
2、apply()
apply() 方法接收两个 参数:一个是在其中运行函数的作用域,另一个是参数数组。其中第二个 参数可以是 Array的实例,也可以是 arguments 对象。
例如:
在这个例子中,callSum1()执行sum()函数时,传入了this作为this值(因为是在全局作用域中调用的,所以传入的是window对象)和 arguments 对象。callSum2()调用sum()函数传入this 和参数数组。两个函数的返回值是一致的。
3、call()
call()方法第一个参数是 this,其余参数逐个列出来。它和apply的作用相同,区别只是传递参数的方式。
例如:
4、call()和apply() 扩充函数作用域
使用call()和apply() 扩充函数作用域的最大好处是,对象不需要与方法有任何耦合关系。
例如:
5、bind()
bind()方法是ECMAScript 5 定义的方法。这个方法会创建一个函数实例,其this值会被绑定传给bind()函数的值。
例如:
5、三者的不同点
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。