当前位置: 首页 > 知识库问答 >
问题:

对象文本中的箭头函数[重复]

楚宏胜
2023-03-14

我试图弄清楚为什么对象文本中的箭头函数被调用为window作为this。有人能给我点见识吗?

var arrowObject = {
  name: 'arrowObject',
  printName: () => {
    console.log(this);
  }
};

// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
var functionObject = {
  name: 'functionObject',
  printName: function() {
    console.log(this);
  }
};

// Prints: Object {name: "functionObject"}
functionObject.printName();
var arrowObject = {
  name: 'arrowObject',
  printName: function printName() {
    console.log(undefined);
  }
};
var functionObject = {
  name: 'functionObject',
  printName: function printName() {
    console.log(this);
  }
};

控制台日志来自Fiddle(其中使用strict;不使用)。

共有1个答案

越俊驰
2023-03-14

请注意,Babel转换假设是严格模式,但是窗口的结果表明您在宽松模式下运行代码。如果你告诉巴别塔假设松散模式,它的Transpililation是不同的:

var _this = this;                    // **

var arrowObject = {
  name: 'arrowObject',
  printName: function printName() {
    console.log(_this);              // **
  }
};

请注意_this全局和console.log(_this);,而不是严格模式Transpilation中的console.log(未定义);

我试图弄清楚为什么对象文本中的箭头函数被调用为window作为this

var arrowObject = {
  name: 'arrowObject',
  printName: () => {
    console.log(this);
  }
};

...窗口。(这表明您没有使用严格模式;我建议在没有明确理由不使用严格模式的情况下使用严格模式。)如果是其他值,例如严格模式全局代码的undefined,则箭头函数中的this将是其他值。

如果我们将初始化器分解为其逻辑等效项,那么创建箭头函数的上下文可能会更清楚:

var arrowObject = {};
arrowObject.name = 'arrowObject';
arrowObject.printName = () => {
  console.log(this);
};
 类似资料:
  • 我以为我理解了和箭头函数之间的关系,但是下面的代码片段让我怀疑我的理解。 我知道箭头函数捕获包含上下文的值。我原以为是对象,但它是。 有人能帮我理解为什么会这样吗?

  • 问题内容: 从箭头函数返回对象时,由于语法上的歧义,似乎有必要使用额外的和关键字集。 那意味着我不会写,但必须写。 如果arrow函数返回的不是对象,则和都是不必要的,例如:。 返回。 修饰符抛出 “::意外标记:‘”。 有什么明显的我想念的吗? 问题答案: 您必须将返回的对象文字包装在括号中。否则,花括号将被视为表示功能的主体。以下作品: 您不需要将任何其他表达式包装到括号中: 等等。

  • 不鼓励将箭头函数(“lambdas”)传递给 Mocha。Lambdas词法绑定 this,无法访问 Mocha 上下文。例如,以下代码将失败: describe('my suite', () => { it('my test', () => { // should set the timeout of this test to 1000 ms; instead will fail thi

  • ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 在继续学习箭头函数之前,请测试你的浏览器是否支持ES6的Arrow Function: 'use strict'; ---- var f

  • 我想知道是否有人能解释一下:

  • 以下是相关代码: 我正在使用babel将es6代码翻译成javascript。这是错误消息: 为什么会出现语法错误?