码迷,mamicode.com
首页 > Web开发 > 详细

【《你不知道的JS(中卷)》】一、关于this

时间:2020-06-14 01:18:22      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:过程   是什么   ase   对象   ext   活动   编写   方法   属性   

一、关于this:

一)、为什么要用this?

function identity() {
	return this.name.toUpperCase();
}

var me = {
	name: "Kyle"
};

var you = {
	name: "Reader"
};

identity.call(me); // Kyle
identity.call(you); // Reader

? 观察上面的代码,使用了this,identity函数就不再需要为每一个对象编写不同版本的函数。

回想之前学习的词法作用域,如果我们想要使用词法作用域来完成类似的功能,应该这样写:

// 显式传入一个上下文对象
function identity(context) {
	return context.name.toUpperCase();
}
// ...
identity(me); // Kyle
identity(you); // Reader

显然,使用this的写法更加优雅。它的作用就是隐式“传递”一个对象引用。

二)、关于this的说明:

1、this并不指向函数自身:

? JS中函数是一个对象,因此是可以在调用函数时存储状态的,但是this并不会指向函数本身。

2、this的作用域:

? this在任何情况下都不指向函数的词法作用域。在JS内部,作用域确实和对象类似,可见的标识符都是它的属性。但是作用域“对象”无法通过JS代码访问,它存在于JS引擎内部。

  • this无法与词法作用域共存!

三)、this到底是什么:

? this是 动态作用域的表亲,this的绑定与函数声明的位置无关,而是取决于函数的调用方式。

? 当一个函数被调用时,会创建一个活动记录(执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this就是记录的其中一个属性,会在函数执行的过程中用到。

【《你不知道的JS(中卷)》】一、关于this

标签:过程   是什么   ase   对象   ext   活动   编写   方法   属性   

原文地址:https://www.cnblogs.com/enmac/p/13122359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!