hechengjin 发表于 2015-9-17 12:36:21

改变作用域的方法 apply call

本帖最后由 hechengjin 于 2015-10-20 09:29 编辑

apply
通过传入对象参数改变原函数作用域为参数作用域。
fun.apply(obj, );
调用fun函数,作用域为obj,参数为a/b/c。
call
同上,不过为不定参数。
new
通过实例化,将构造函数this指针指向实例函数。


bind的作用和apply,call类似都是改变函数的execute context,也就是runtime时this关键字的指向。但是使用方法略有不同。一个函数进行bind后可稍后执行。



http://yalishizhude.github.io/2015/09/16/pieces/?utm_source=tuicool

java 发表于 2017-11-27 16:14:34

call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array。它不能应用Array下的push,pop等方法。我们可以通过:var domNodes =Array.prototype.slice.call(document.getElementsByTagName("*"));这样domNodes就可以应用Array下的所有方法了。

// 将 arguments 对象转为数组
var args = [].slice.call(arguments);         以arguments对象调用数组的方法slice


页: [1]
查看完整版本: 改变作用域的方法 apply call