this是面向对象语言中的一个重要概念,在Java,C#等大型语言中,this固定指向运行时的当前对象。但是在JavaScript中,由于JavaScript的动态性,this的指向在运行时才确定。这个特性给我们带来迷惑的同时,也带来了编程上的自由和灵活,结合apply、call、bind方法,可以使JavaScript变得异常强大。
强大的特性必然会让人难以理解,尤其是初学者,下面我将传授我多年的经验,教你分清this的作用域到底是哪里?重点:谁调用this所在的函数,this就指向谁!
就是这么简简单单一句话,大家千万记住。接下来是求证时间,请睁大你的双眼,见证奇迹的时刻到了
这段代码的输出值是什么?张三还是李四?答案是李四,为什么呢?
我们来分析一下:this所在的方法块是bar,而bar这个方法是谁调用的呢?最后一行代码已经表明了,bar()是由foo这个对象调用的,所以得出结论,this指向的是foo这个对象。
那么我们趁热打铁,再来看一个例子(进阶版):
这段代码的执行结果是这样的:
我们来分析一下,obj.foo()返回foo对象很好理解,跟上面的一样。这里要着重讲一下bar()这个方法,为什么返回window对象呢?
其实bar()这个方法,它的完整写法应该是this.bar(),而这里的this是指代浏览器中的window对象,所以程序的执行结果也毫无疑问是window对象。
还是那句话,谁调用this所在的函数,this就指向谁!文章很短,但都是干货!希望大家可以从字里行间学到真功夫!大家如果喜欢我的文章,记得关注我。
留言与评论(共有 0 条评论) |