多语言展示
当前在线:1388今日阅读:2今日分享:38

javascript基础:call & apply 有什么区别

首先要了解JS里的this对象,this对象是在运行时基于函数的执行环境绑定的,在全局函数中,this等于window,而当函数作为某个对象例如A的方法B被调用时,this等于A对象,这里有个例外,匿名函数的执行环境具有全局性,因此匿名函数的this对象通常指向window。用一句话总结,就是谁调用this,谁就被引用。
工具/原料
1

计算机一台

2

代码编辑工具

方法/步骤
1

先不要看匿名函数的话,就可以很好地理解this对象了,用一句话总结,就是谁调用this,谁就被引用。

2

o中定义了sayHi这个方法,这个方法被调用时,this对象在sayHi方法的执行环境被创建时绑定在其上,因此this等于o对象,调用o对象的name,由于name在该对象中没有被没有被定义,又由于在搜索这个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的变量

3

来个进阶的,这个例子有利于验证this是绑定在拥有该方法的对象上,而不是该方法本身:

4

如果只有一个对象的情况

5

如果是匿名函数,由于匿名函数的执行环境具有全局性,因此其this对象指向window

6

因为JS里的this对象是可以毫想跟谁就跟谁的,因此,我们可以把外部作用域中的this对象保存在一个闭包能够访问到的变量里,就可以让闭包访问该对象了。

7

apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.   Function.apply(obj,args)方法能接收两个参数      obj:这个对象将代替Function类里this对象      args:这个是数组,它将作为参数传给Function(args-->arguments)call:和apply的意思一样,只不过是参数列表不一样.   Function.call(obj,[param1[,param2[,…[,paramN]]]])      obj:这个对象将代替Function类里this对象      params:这个是一个参数列表

推荐信息