先看一段嵌套了两层function的JavaScript代码: 复制代码 代码如下: var me = { name : "Jimbor", blog : "http://jmedia.cn/", sayMyName : function(){ var pre = "My name is: "; function displayName(){ alert(pre + this.name); } displayName(); } } me.sayMyName();
从代码上看,我们希望通过sayMyName()的调用来显示me的name属性,即:My name is: Jimbor。但浏览器的执行结果是: 复制代码 代码如下: My name is:
apply()函数可以在调用某个函数时重写this所指向的对象,它接受两个参数,第一个this_obj即想要重写this所指向的对象,params_array则是用来传递给调用函数的参数数组。我们把原来的代码改写为: 复制代码 代码如下: var me = { name : "Jimbor", blog : "http://jmedia.cn/", sayMyName : function(){ var pre = "My name is: "; function displayName(){ alert(pre + this.name); } displayName.apply(me); } } me.sayMyName();
再看浏览器执行结果: My name is: Jimbor 类似的函数还有call()。区别是call()传参的方式是一个接一个而不是打包成一个数组。 方法二:用that替换this 即我们可以在最外层的函数定义一个变量来指向this所指向的对象,一旦内部的函数需要调用this时,我们就用这个定义的变量。通常根据习惯,会将这个变量命名为that。那么原来的代码可以改成这样: 复制代码 代码如下: var me = { name : "Jimbor", blog : "http://jmedia.cn/", sayMyName : function(){ var pre = "My name is: "; var that = this; function displayName(){ alert(pre + that.name); } displayName(); } } me.sayMyName();