Web前端是目前比较火的行业,但想要轻松找到高薪工作,一定要具备扎实的基础和丰富的项目经验,所以在学习web前端中一定要打好基础学好重要知识点。JavaScript是web前端中重要的部分,今天就给大家介绍web前端中JavaScript this的应用。
要说 JavaScript 这门语言最容易让人困惑的知识点,this 关键词肯定算一个。JavaScript 语言面世多年,一直在进化完善,现在在服务器上还可以通过 node.js 来跑 JavaScript。显然,这门语言还会活很久。
如果你是一个 JavaScript 开发者或者说 web 开发者,学好 JavaScript 的运作原理以及语言特点肯定对你以后大有好处。开始之前强烈推荐你先掌握好下面的知识:
变量作用域和作用域提升
JavaScript 的函数
闭包
如果没有对这些基础知识掌握踏实,直接讨论 JavaScript 的 this 关键词只会让你感到更加地困惑和挫败。
什么是 this ?
如果你学过一门基于类的面向对象编程语言(比如 C#,Java,C++),那请将你对 this 这个关键词应该是做什么用的先入为主的概念扔到垃圾桶里。JavaScript 的 this 关键词是很不一样,因为 JavaScript 本来就不是一门基于类的面向对象编程语言。
虽说 ES6 里面 JavaScript 提供了类这个特性给我们用,但它只是一个语法糖,一个基于原型继承的语法糖。
this 就是一个指针,指向我们调用函数的对象。
请记住,在 Class 添加到 ES6 之前,JavaScript 中没有 Class 这种东西。Class 只不过是一个将对象串在一起表现得像类继承一样的语法糖,以一种我们已经习惯的写法。所有的魔法背后都是用原型链编织起来的。
如果上面的话不好理解,那你可以这样想,this 的上下文跟英语句子的表达很相似。比如下面的例子
Bob.callPerson(John);
就可以用英语写成 “Bob called a person named John”。由于 callPerson() 是 Bob 发起的,那 this 就指向 Bob。我们将在下面的章节深入更多的细节。到了这篇文章结束时,你会对 this 关键词有更好的理解(和信心)。
执行上下文
执行上下文 是语言规范中的一个概念,用通俗的话讲,大致等同于函数的执行“环境”。具体的有:变量作用域(和 作用域链条,闭包里面来自外部作用域的变量),函数参数,以及 this 对象的值。
引自: Stackoverflow.com
记住,现在起,我们专注于查明 this 关键词到底指向哪。因此,我们现在要思考的就一个问题:
是什么调用函数?是哪个对象调用了函数?
为了理解这个关键概念,我们来测一下下面的代码。
var person = {
name: "Jay