你的位置:首页 > 软件开发 > Java > JavaScript中‘this’关键词的优雅解释

JavaScript中‘this’关键词的优雅解释

发布时间:2016-08-24 01:00:11
本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation-of-this-in-javascript/1. this之谜 ...

本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation-of-this-in-javascript/

1. this之谜

许多时候,this关键词对我以及许多刚起步的JavaScript程序员来说,都是一个谜。它是一种很强大的特性,但是理解它需要花不少功夫。

对有Java, PHP或者其他常见的编程语言背景的人来说,this仅仅被看成是类方法中当前对象的一个实例:不会多也不会少。多数时候,它不能在方法外被使用。正是这样一种简单的使用方法,避免了混淆。

在JavaScript中,this是当前执行函数的上下文。因为JavaScript有4种不同的函数调用方式:

  • 函数调用: alert('Hello World!')
  • 方法调用: console.log('Hello World!')
  • 构造函数调用: new RegExp('\\d')
  • 隐式调用: alert.call(undefined, 'Hello World!')

并且每种方法都定义了自己的上下文,this会表现得跟程序员预期的不太一样。同时,strict模式也会影响函数执行时的上下文。

理解this的关键点就是要对函数调用以及它如何影响上下文有个清晰的观点。这篇文章将会着重于对函数调用的解释、函数调用如何影响this以及展示确定上下文时常见的陷阱。

在开始之前,让我们来熟悉一些术语:

  • 函数调用 指执行构成一个函数的代码(简单说就是call一个函数)例如parseInt('15')parseInt函数调用.
  • 函数调用上下文this在函数体中的值。
  • 函数的作用域指的是在函数体内可以使用的变量、对象以及函数的集合。

2. 函数调用

当一个表达式为函数接着一个(,一些用逗号分隔的参数以及一个时,函数调用被执行。例如parseInt('18')。这个表达式不能是属性访问,如myObject.myFunction,因为这会变成一个方法调用。举个例子,[1,5].join(',')不是一个函数调用,而是一个方法调用。

一个简单的函数调用例子:

1 function hello(name) {2   return 'Hello ' + name + '!';3 }4 // Function invocation5 var message = hello('World');6 console.log(message); // => 'Hello World!'

原标题:JavaScript中‘this’关键词的优雅解释

关键词:JavaScript

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。