目录

JavaScript this关键字


示例

const person = {
  firstName: "John",
  lastName : "Doe",
  id       : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};
亲自试一试 »

什么是this

在 JavaScript 中,this关键字指的是对象

哪个对象取决于如何this正在被调用(使用或调用)。

这个this关键字根据其使用方式指代不同的对象:

在对象方法中,this指的是对象
独自的,this指的是全局对象
在一个函数中,this指的是全局对象
在函数中,在严格模式下,thisundefined
在一次活动中,this指的是元素收到该事件的。
方法如call(),apply(), 和bind()可以参考this任何物体

笔记

this不是变量。这是一个关键字。您无法更改的值 this

this在方法中

当在对象方法中使用时,this指的是对象

在此页面顶部的示例中,this指的是目的。

因为全名方法是一种方法目的。

fullName : function() {
  return this.firstName + " " + this.lastName;
}
亲自试一试 »

this单独使用

单独使用时,this指的是全局对象

因为this正在全局作用域内运行。

在浏览器窗口中,全局对象是[object Window]:

示例

let x = this;
亲自试一试 »

严格模式,单独使用时,this也指全局对象:

示例

"use strict";
let x = this;
亲自试一试 »

this在函数中(默认)

在一个函数中,全局对象是默认绑定this

在浏览器窗口中,全局对象是[object Window]:

示例

function myFunction() {
  return this;
}
亲自试一试 »


this在函数中(严格)

JavaScript严格模式不允许默认绑定。

因此,当在函数中使用时,在严格模式下,thisundefined

示例

"use strict";
function myFunction() {
  return this;
}
亲自试一试 »

this在事件处理程序中

在 HTML 事件处理程序中,this指的是接收事件的 HTML 元素:

示例

<button onclick="this.style.display='none'">
  Click to Remove Me!
</button>

亲自试一试 »


对象方法绑定

在这些例子中,thisperson:

示例

const person = {
  firstName  : "John",
  lastName   : "Doe",
  id         : 5566,
  myFunction : function() {
    return this;
  }
};
亲自试一试 »

示例

const person = {
  firstName: "John",
  lastName : "Doe",
  id       : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};
亲自试一试 »

this.firstNamethis(person)的firstName属性。


显式函数绑定

这个call()apply()方法是预定义的 JavaScript 方法。

它们都可以用于以另一个对象作为参数来调用对象方法。

下面的示例以 person2 作为参数调用 person1.fullName,this引用 person2,即使 fullName 是 person1 的方法:

示例

const person1 = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}

const person2 = {
  firstName:"John",
  lastName: "Doe",
}

// Return "John Doe":
person1.fullName.call(person2);

亲自试一试 »


函数借用

随着bind()方法,一个对象可以借用另一个对象的方法。

此示例创建 2 个对象(人员和成员)。

成员对象借用了 person 对象的 fullname 方法:

示例

const person = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}

const member = {
  firstName:"Hege",
  lastName: "Nilsen",
}

let fullName = person.fullName.bind(member);
亲自试一试 »

this优先级

确定哪个对象this指;使用以下优先顺序。

优先级 对象
1 绑定()
2 apply() 和 call()
3 对象方法
4 全局作用域

this在使用bind()调用的函数中?

this在使用 apply() 调用的函数中?

this在使用 call() 调用的函数中?

this在对象函数(方法)中?

this在全局作用域内的函数中。