本文转载自:众成翻译 译者: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
(#换成@)。