javascript - ‘this’ 在 JavaScript 中如何工作?

标签 javascript

我是 JavaScript 新手,我需要一些帮助来了解 this 关键字在 JavaScript 中的工作原理。当我运行以下代码时,结果是 2,这是显而易见的。

function foo() {
  console.log( this.a );
}

var obj = {
  a: 2,
  foo: foo
};

var a = 'global a';

obj.foo(); // 2

但是如果我运行以下代码,然后打印全局 a 而不是 obj.a。

function foo(){
  console.log(this.a);
}

var obj = {
  a:2,
  foo:foo
}

var bar = obj.foo;
var a = 'global a';

bar();

请有人告诉我为什么要打印全局 a?

最佳答案

在第一个示例中,当您调用函数 foo 时关于变量 objthis 的上下文是obj本身。这就是为什么a == 2 。现在,当您引用函数foo时到变量barthis 的上下文是全局window ,以及变量 a在这种情况下是global a 。在本例中,要使函数foo行为方式与第一个示例相同,您可以将其绑定(bind)到 obj语境。像这样:

function foo(){
  console.log(this.a);
}

var obj = {
  a:2,
  foo:foo
}

// bind the context to obj
var bar = obj.foo.bind(obj);
var a = 'global a';

bar();

我希望我能说清楚......;)

关于javascript - ‘this’ 在 JavaScript 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43963702/

相关文章:

javascript - 在 $rootScope 中存储用户数据——好还是坏?

javascript - 加速优化 JavaScript 函数

javascript - 如何使用 mongodb 迭代对象内的数组

javascript - 如何调试生产 Angular2/Typescript 应用程序?

javascript - 如何使用和访问 Backbone.js 集合作为模型中的属性/属性?

javascript - 如何在 Jekyll Liquid 语法的 for 循环中获取图像的宽度和高度并将其转换为 js $ 变量?

javascript - jquery第n个选择器,交替颜色但不使用奇数和偶数选择器

javascript - JavaScript中如何确定操作系统路径分隔符(2)?

javascript - Jest - 如何使用模拟类实例

javascript - 我没有收到 ajax 请求的响应