JS this关键字 2019-08-27

  • this不管用在什么场合都有一个共同点:它总是返回一个对象
  • this就是属性或方法“当前”所在的对象
this.property
//this就代表property属性当前所在的对象
  • 由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。

this主要有以下几个使用场合:

(1)全局环境

  • 全局环境使用this,它指的就是顶层对象window
this === window // true

function f() {
  console.log(this === window);
}
f() // true

上面代码说明,不管是不是在函数内部,只要是在全局环境下运行,this就是指顶层对象window
(2)构造函数

  • 构造函数中的this,指的是实例对象。
var Obj = function (p) {
  this.p = p;
};

上面代码定义了一个构造函数Obj。由于this指向实例对象,所以在构造函数内部定义this.p,就相当于定义实例对象有一个p属性。

(3)对象的方法

  • 如果对象的方法里面包含thisthis的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向。

使用注意点

1、避免对层this

  • 由于this的指向是不确定的,所以切勿在函数中包含多层的this
  • 使用一个变量固定this的值,然后内层函数调用这个变量,是非常常见的做法

2、避免数组处理方法中的 this

  • 数组的mapforeach方法,允许提供一个函数作为参数。这个函数内部不应该使用this

3、避免回调函数中的 this

  • 回调函数中的this往往会改变指向,最好避免使用。

绑定 this 的方法

JavaScript 提供了callapplybind这三个方法,来切换/固定this的指向。

Function.prototype.call()

  • 函数实例的call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。
  • call方法的参数,应该是一个对象。如果参数为空、nullundefined,则默认传入全局对象。
  • 如果call方法的参数是一个原始值,那么这个原始值会自动转成对应的包装对象,然后传入call方法。

Function.prototype.apply()

  • apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数。唯一的区别就是,它接收一个数组作为函数执行时的参数,使用格式如下
func.apply(thisValue, [arg1, arg2, ...])
  • apply方法的第一个参数也是this所要指向的那个对象,如果设为nullundefined,则等同于指定全局对象
  • 第二个参数则是一个数组,该数组的所有成员依次作为参数,传入原函数。原函数的参数,在call方法中必须一个个添加,但是在apply方法中,必须以数组形式添加
function f(x, y){
  console.log(x + y);
}

f.call(null, 1, 1) // 2
f.apply(null, [1, 1]) // 2

Function.prototype.bind()

  • bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 涵义 this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this...
    oWSQo阅读 3,529评论 0 1
  • 转载自:https://wangdoc.com/javascript/oop/this.html 1,涵义 thi...
    团子家族_方糖咖啡阅读 3,465评论 0 1
  • 涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 首先,thi...
    许先生__阅读 3,624评论 0 4
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,621评论 0 4
  • 1.涵义 this关键字是一个非常重要的语法点,this可以用在构造函数中,表示实例对象。 this还可以用在很多...
    MajorDong阅读 8,091评论 0 0

友情链接更多精彩内容