JavaScript 中的 this 关键字

发布于 2022-08-24 23:24:00 字数 2836 浏览 202 评论 2

this 关键字 允许您引用函数的 执行上下文,这是一种花哨的说法 this 指调用函数时函数作为其属性的对象。

// `this` is an implicit parameter to the function
const fn = function() {
  return this;
};

// One way that `this` is set is by attaching the function
// to an object.
const obj1 = { fn };
const obj2 = { fn };

obj1.fn() === obj1; // true
obj1.fn() === obj2; // false

obj2.fn() === obj1; // false
obj2.fn() === obj2; // true

需要注意的重要一点是,由于函数在 JavaScript 中是普通的旧变量, this 可能会改变。 一种破坏价值的常见方法 this 就是给一个对象分配一个函数,然后在没有关联对象的情况下调用该函数。这被非正式地称为 失去其上下文

const fn = function() {
  return this;
};

const obj = { fn };

// If you call `fn()` without a property access `.`, you're
// implicitly setting the function context to `null`.
const myFn = obj.fn;
myFn() == null; // true in strict mode

TLDR: this隐式参数 函数调用,它包含该函数在调用时的属性的任何对象。

和 Class 类一起使用

你会经常看到 this 在 ES6 类方法中。 在类方法中, this 指调用该方法的对象的实例。

class MyClass {
  myFunction() {
    return this;
  }
}

const obj = new MyClass();

obj.myFunction() === obj; // true

箭头函数

箭头函数很特殊,因为与其他函数不同,它们具有 词法上下文 。 这意味着 this 在箭头函数中与 this 在箭头函数之外,无论您如何调用箭头函数。

const arrow = () => this;

arrow() == null; // true

const obj = { arrow };

// Even though `arrow()` is attached to an object, it still
// has the same context as the surrounding block.
obj.arrow() == null; // true
obj.arrow() == this; // true

bind(), call()apply()

每个 JavaScript 函数都有一个 Function#call() 功能 和一个 Function#apply() 函数 可让您设置值的 this 没有明确地将函数附加到对象。 你可以想到 call()apply() 让你设置隐式参数 this 明确地。

还有一个 Function#bind(),创建具有预设上下文的函数副本的函数。

const fn = function() {
  return this;
};

const obj = {};

fn.call(obj) === obj; // true
fn.apply(obj) === obj; // true

const copy = fn.bind(obj);
copy() === obj; // true
copy === fn; // false

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

JSmiles 2023-03-21 12:58:39

感谢您的收藏,又什么疑问可以在这里留言讨论,也可以在前端开发社区提问,获取更多帮助(这里有很多大牛 :) )。

~没有更多了~

关于作者

虐人心

有一天你能到我的心里去,你会看到那里全是你给的伤悲。

0 文章
0 评论
24515 人气
更多

推荐作者

隔纱相望

文章 0 评论 0

昵称有卵用

文章 0 评论 0

梨涡

文章 0 评论 0

蓝咒

文章 0 评论 0

白芷

文章 0 评论 0

樱娆

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文