当前位置: 首页 > 面试题库 >

JavaScript ES6对象中的方法:使用arrow功能

裴心思
2023-03-14
问题内容

在ES6中,这两个都是合法的:

var chopper = {
    owner: 'Zed',
    getOwner: function() { return this.owner; }
};

并且,作为速记:

var chopper = {
    owner: 'Zed',
    getOwner() { return this.owner; }
}

是否可以使用新的箭头功能?在尝试类似

var chopper = {
    owner: 'John',
    getOwner: () => { return this.owner; }
};

要么

var chopper = {
    owner: 'John',
    getOwner: () => (this.owner)
};

我收到一条错误消息,提示该方法无权访问this。这仅仅是语法问题,还是您不能在ES6对象内部使用胖管道方法?


问题答案:

arrow函数并非设计为在所有情况下仅作为老式函数的简化版本使用。它们不打算使用function关键字替换函数语法。arrow函数最常见的用例是不重新定义的短“
lambdathis,通常在将函数作为回调传递给某些函数时使用。

arrow函数不能用于编写对象方法,因为,正如您所发现的,由于arrow函数this在词法包围的上下文上方闭合,this因此箭头内的in是您定义对象的当前位置。这就是说:

// Whatever `this` is here...
var chopper = {
    owner: 'Zed',
    getOwner: () => {
        return this.owner;    // ...is what `this` is here.
    }
};

对于您的情况,要在对象上编写方法,应仅使用传统function语法或ES6中引入的方法语法:

var chopper = {
    owner: 'Zed',
    getOwner: function() {
        return this.owner;
    }
};

// or

var chopper = {
    owner: 'Zed',
    getOwner() {
        return this.owner;
    }
};

(它们之间有细微的差别,但是只有在不使用或复制到另一个对象super中时getOwner,它们才重要getOwner。)

在es6邮件列表上,关于箭头功能的扭曲有一些争论,这些功能具有相似的语法但都有自己的语法this。但是,该建议很少得到接受,因为这仅仅是语法甜头,使人们可以省去键入几个字符,并且不提供比现有函数语法更多的新功能。请参阅主题未绑定arrow功能



 类似资料:
  • 问题内容: (() => console.log(arguments))(1,2,3); 根据Babel的说法(从我可以告诉TC39的最初建议),这是“无效的”,因为箭头函数应该使用其父作用域作为参数。我唯一能发现与这矛盾的信息是一条评论说它被TC39拒绝了,但是我找不到任何支持的信息。 只是在这里寻找官方文档。 问题答案: Chrome,FF和node似乎在这里是错误的,Babel是正确的: 箭

  • 类以这种方式实例化: 代码如下:

  • 假设我有一段代码,可以创建一个具有给定名称的苹果实例 这条线可以被许多玩家调用,每个玩家都有一个Apple类的实例,在这个实例中,名称有点像ID 现在假设在Apple类中有一个ArrayList,它存储每个玩家的朋友 还有一个getter/setter用于更新和检索朋友,所以如果一个特定的玩家键入一个命令 /addfriend将一个朋友添加到他的特定实例数组列表中,我将如何做到这一点? 示例,更新

  • 本文向大家介绍在Django的session中使用User对象的方法,包括了在Django的session中使用User对象的方法的使用技巧和注意事项,需要的朋友参考一下 通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。 当然了,Django 也提供了工具来处理这样的常见任务(

  • 本文向大家介绍普通对象使用spring容器中的对象的实现方法,包括了普通对象使用spring容器中的对象的实现方法的使用技巧和注意事项,需要的朋友参考一下 引语: 工作中有时候需要在普通的对象中去调用spring管理的对象,但是在普通的java对象直接使用@Autowired或者@Resource的时候会发现被注入的对象是null,会报空指针。我们可以简单的理解为spring是一个公司,它管理的对

  • 问题内容: Java8中是否有一种方法可以将方法引用用作对象来使用其方法,例如: 这个问题与无关,仅作为示例,我想对方法参考有答案 问题答案: 您可以编写一个静态方法来执行此操作: 然后,您可以将其放在实用程序类中并静态导入。 或者,创建一个更简单的静态方法,该方法 只 返回给定的函数,以使编译器知道您在做什么: