ES6 对象中的方法:使用箭头函数

2023-11-25

在 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; }
};

or

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

我收到一条错误消息,表明该方法无权访问this。这只是一个语法问题,还是不能在 ES6 对象中使用粗箭头方法?


箭头函数并非设计为仅作为老式函数的较短版本在所有情况下使用。它们并不旨在使用以下方式替换函数语法function关键词。箭头函数最常见的用例是不重新定义的短“lambda”this,通常在将函数作为回调传递给某个函数时使用。

箭头函数不能用于编写对象方法,因为正如您所发现的,由于箭头函数关闭了对象方法this词汇封闭上下文的this箭头内的是您当前定义对象的位置。也就是说:

// 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 in getOwner,你不是,或者如果你复制getOwner到另一个对象。)

在 es6 邮件列表上存在一些关于箭头函数的争论,这些函数具有相似的语法,但有自己的特点this。然而,这个提议并没有得到很好的接受,因为这只是语法糖,允许人们节省输入几个字符,并且没有为现有函数语法提供新功能。看主题未绑定的箭头函数.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 对象中的方法:使用箭头函数 的相关文章

随机推荐

  • Express 4.0 中的“扩展”是什么意思?

    我在我的应用程序中使用 Express 和 body parser app use bodyParser urlencoded extended false 但是 express 4 0 中的 扩展 是什么意思 我找到了这个 extende
  • 如何清除Python脚本中间的所有变量?

    我正在Matlab中寻找类似于 clear 的东西 一个命令 函数 它从工作区中删除所有变量 从系统内存中释放它们 Python中有这样的东西吗 编辑 我想编写一个脚本 在某个时候清除所有变量 以下命令序列确实删除了every当前模块的名称
  • Google API 密钥的有效期是多久?

    我正在使用获取播放列表的详细信息Youtube API V3使用 API 密钥 我找不到任何有关API KEY有效期的信息 我想确保在应用程序过期之前为其重新生成新的 API 密钥 公共 API 密钥位于底部谷歌开发者控制台API 和身份验
  • 播放 HTTP Live Streaming 视频时访问 AVPlayer 的数据

    我正在使用 AVPlayer 播放 HTTP 实时流媒体视频 有什么办法可以访问播放器的缓存数据并将其保存在本地吗 太长了 这并非不可能 但结果很可能不会那么好 请记住 HTTP 视频流实际上由多个带宽流组成 其中每一个都被分为更小的 MP
  • ffmpeg 格式设置,矩阵 bt709

    有谁知道我如何实现以下色彩空间 bt 709 通过 FFmpeg 这是我的文件中现在的内容 正如你所看到的Format settings Matrix默认情况下 我该如何设置它 格式设置 矩阵 自定义或标准 组件原色 BT 709 传输特性
  • border-radius 应该裁剪内容吗?

    当容器有时 我的容器中的内容不应该被切断吗 border radius HTML 和 CSS 示例 progressbar height 5px width 100px border radius 5px buffer width 25px
  • 从网站打开新的 Outlook,mailTo 链接太长,*.eml 文件密件抄送字段未加载

    我正在尝试打开一个 eml使用 Microsoft Outlook 2010 文件并遇到问题bcc field 这是我的eml file To email protected Subject Mail Subject cc email pr
  • 如何向soapVars添加属性

    我想创建具有如下属性的soapVars
  • Firebase/Android - 定期丢失数据库连接

    我遵循了 Firebase 身份验证和数据库的文档 全新安装后一切正常 用户可以注册或登录 数据按应有的方式检索 按应有的方式写入 超快 超干净 耶 然后 通过 android Studio 重新启动几次后 数据库的东西就不再工作了 重新启
  • 即使线程中的方法已返回,为什么 Thread.Join() 仍会挂起?

    我有一个 WPF 应用程序 它使用一些库代码进行身份验证 需要在单线程单元线程中运行 我的方法是生成一个单独的线程来获取身份验证对象 阻塞直到线程返回 然后继续执行 然而 在some即使线程方法已返回 我的应用程序也会挂在 Thread J
  • 在docker中更改JAVA_HOME

    我想要 dockerise 的遗留 Web 应用程序使用一些旧的类 例如com sun image codec jpeg ImageFormatExceptionJava SE7 之前都支持 现在在 docker 容器中默认的 jdk 获取
  • 如何在 R 中重用管道运算符长链的部分?

    我有一组管道操作员链 gt 用不同的数据集做不同的事情 例如 dataset gt mutate gt filter gt rowwise gt summarise gt etc 如果我想重用这些链的某些部分 有没有办法做到这一点 而不仅仅
  • 线程忽略键盘中断异常

    我正在运行这个简单的代码 import threading time class reqthread threading Thread def run self for i in range 0 10 time sleep 1 print
  • 使用 IronPython 访问 Pandas 库

    我的目标是将 Python 连接到 NET 以实现流程 我正在使用 IronPython Python 部分涉及一些计算 我使用 Pandas 库 有没有办法连接 IronPython 和 Pandas 我发现使用 IronPython 我
  • 在 Swift 中对 PDF 进行注释/绘图

    我正在编写一个应用程序 其中包含多个 PDF 文档 我将根据用户的输入在屏幕上显示这些文档 显示后 我希望允许用户在 PDF 上绘图 注释 然后我想保存带有绘图 注释的 PDF 以供以后使用 我一直在无休止地搜索有关 PDF 注释的教程 但
  • 文本提取 - 逐行

    我正在使用 Google Vision API 主要是为了提取文本 我工作得很好 但对于我需要 API 扫描输入行的特定情况 在移动到下一行之前吐出文本 然而 该 API 似乎正在使用某种逻辑 使其从左侧从上到下扫描 然后移动到右侧并进行从
  • NGINX:如何在一台服务器或域名中设置多个端口?

    我是 Nginx 新手 我的设置遇到问题 我希望我的服务器在公共上使用多个端口运行 例如 server listen 443 ssl server name
  • D 中异常处理的开销

    在 D2 编程语言中 使用异常处理对性能有何影响 尤其 如果我不写异常处理代码怎么办 如果我这样做了 但没有抛出任何异常怎么办 如果我这样做并且抛出异常怎么办 异常处理是否会导致错过任何优化机会 是否可以像许多 大多数 C 实现中那样禁用异
  • 无法在“ApplicationUser”上配置密钥,因为它是派生类型,但 ApplicationUser 上没有密钥配置

    我正在尝试使用 ApplicationUser 自定义 IdentityUser 我按照微软文章中的步骤操作 但是当我运行应用程序时 我在方法上收到此错误base OnModelCreating modelBuilder System In
  • ES6 对象中的方法:使用箭头函数

    在 ES6 中 这两个都是合法的 var chopper owner Zed getOwner function return this owner 并且 作为简写 var chopper owner Zed getOwner return