首先要了解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:这个是一个参数列表