ES6 对象字面量中的简洁方法和非简洁方法

2023-11-27

let module = {
     add: function(a, b){
        return parseInt(a) + parseInt(b);
     },

    sub(a, b){
        return parseInt(a) - parseInt(b);
    }
};

使用这两种方法的根本区别是什么concise方法语法,例如sub与传统的acove相比不简洁使用的方法语法add?

除了语法之间的明显差异之外,还有concise and 不简洁方法本质上是一样的吗?


一个显着的区别是concise方法可以利用super关键字和不简洁 (aka: 传统的) 方法不能。当改变对象原型来帮助时,这变得相关遗产.

为了证明这一点,请考虑以下要点:


Example:

const frenchPerson = {
  speak() {
    return 'Bonjour';
  }
};

const englishPerson = {
  speak() {
    return 'Hello';
  }
};

const multilinguist = {
  speak() {
    return `${super.speak()}, Hola`
  }
};

console.log(frenchPerson.speak()) // -> "Bonjour"
console.log(englishPerson.speak()) // -> "Hello"

Object.setPrototypeOf(multilinguist, frenchPerson);
console.log(Object.getPrototypeOf(multilinguist) === frenchPerson); // true

console.log(multilinguist.speak()); // -> "Bonjour, Hola"

Object.setPrototypeOf(multilinguist, englishPerson);
console.log(Object.getPrototypeOf(multilinguist) === englishPerson); // true

console.log(multilinguist.speak()); // -> "Hello, Hola"

解释:

  1. 首先记下所有物体;frenchPerson, englishPerson, and multilinguist,利用concise方法语法。

  2. 如您所见,concise方法名为speak of the multilinguist对象利用super.speak()指向它的对象原型(无论哪个)。

  3. 设定原型后multilinguist to frenchPerson我们调用multilinguist's speak()方法 - 回复/记录:

    Bonjour, Hola

  4. 然后我们设置原型multilinguist to englishPerson并询问multilinguist to speak()再次 - 这次它回复/记录:

    Hello, Hola


当发生什么multilinguist's speak()方法是不简洁?

当使用不简洁 speak()方法中的multilinguist对象除了super它返回的引用:

Syntax Error

如下例所示:

const englishPerson = {
  speak() {
    return 'Hello';
  }
};

const multilinguist = {
  speak: function() {           // <--- non-concise method
    return `${super.speak()}, Hola`
  }
};

Object.setPrototypeOf(multilinguist, englishPerson);

console.log(multilinguist.speak()); // -> Syntax Error

附加说明:

为了实现上述目标不简洁方法;call()可以用作替代品super如下所示:

const englishPerson = {
  speak() {
    return 'Hello';
  }
};

// Non-concise method utilizing `call` instead of `super`
const multilinguist = {
  speak: function() {
    return `${Object.getPrototypeOf(this).speak.call(this)}, Hola!`
  }
};

Object.setPrototypeOf(multilinguist, englishPerson);

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

ES6 对象字面量中的简洁方法和非简洁方法 的相关文章

  • angularjs:如何向资源对象添加缓存?

    在 http 中添加缓存非常简单 通过传递cache true http docs angularjs org api ng http https docs angularjs org api ng service 24http有缓存选项
  • chrome 调试器承诺在暂停时不会解析?

    也许我没有正确调试承诺 但基本上 如果您在断点处停止并运行异步代码 它实际上不会完成 直到您恢复执行为止 这是一个问题 调试器允许您快速试验多个 api 方法 但如果您恢复它 您就不能 debugger now type the follo
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 如何更改传单中功能集的样式?

    我正在看等值区域的例子 https leafletjs com examples choropleth https leafletjs com examples choropleth 这是他们使用的数据源 type Feature prop
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • 在Javascript中按降序对字符串进行排序(最有效)?

    W3Schools 有这个例子 var fruits Banana Orange Apple Mango fruits sort fruits reverse 这是在 Javascript 中按降序对字符串进行排序的最有效方法吗 Updat
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • 单击关闭按钮后不显示 Google 一键登录 UI

    我正在尝试按照本指南使新的谷歌一键登录工作 https developers google com identity one tap web https developers google com identity one tap web
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • Nodejs mysql 获取正确的时间戳格式

    我在用着mysqljs https github com mysqljs mysql得到结果后sql我变得不同TimeStamp格式如下 created at Sat Jul 16 2016 23 52 54 GMT 0430 IRDT 但
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 如何向 log4j 消息添加前缀(在对象级别)

    我使用 log4j2 我想为我的所有消息添加前缀 该前缀被传递给构造函数参数 它取决于类的实例 所以我们处于对象级别 而不是类或线程 例如 我有一个A类实例化就像new A 152 所以当我使用log error message 在这堂课上
  • 有没有办法强制 ASP.NET Web API 返回纯文本?

    我需要从 ASP NET Web API 控制器获取纯文本响应 我尝试过提出请求Accept text plain但它似乎并没有达到目的 此外 该请求是外部的 不受我的控制 我要完成的是模仿旧的 ASP NET 方式 context Res
  • 从基类访问子类的静态成员

    我有以下基类 class BaseClass public static myFlag boolean false constructor reference ChildClass myFlag 与儿童班 class ChildClass
  • 当我在 Chrome 中单击“允许”时,为什么 getUserMedia 会抛出 [object NavigatorUserMediaError]?

    最近 我在尝试通过我的网站访问客户的麦克风时开始出现错误 当Chrome询问是否允许网站访问用户的麦克风时 object NavigatorUserMediaError 无论他们点击 允许 还是 拒绝 都会产生 无论麦克风是否实际插入计算机
  • 在Python中分割分号分隔的字符串

    我想分割一个以分号分隔的字符串 以便我可以使用 Python 存储每个单独的字符串 以用作 XML 标记之间的文本 字符串值如下所示 08 26 2009 08 27 2009 08 29 2009 它们只是存储为字符串值的日期 我想迭代每
  • iOS:带有按钮图像的导航栏

    我想创建一个导航栏 其中图像作为导航栏右侧的按钮 像下面的快照 我怎样才能实现这个目标 希望这可以帮助 viewController navigationItem titleView UIImageView alloc initWithIm
  • 如何在 Go 中获取文件的组 ID (GID)?

    os Stat 返回一个FileInfo对象 它有一个Sys 返回一个方法Interface 没有方法 虽然我有能力fmt Printf 它 看到 Gid 我无法以编程方式访问 Gid 我如何在这里检索文件的 Gid file info o
  • 用不同的颜色填充水平线上方和下方的区域[重复]

    这个问题在这里已经有答案了 Aim 我正在尝试填充 R 中 ggplot 生成的图中两条线之间的区域 我想用与水平线下方不同的颜色填充水平线上方的线之间的所有内容 我成功地用单一颜色填充了两条线之间的所有内容 但是 我无法用两种不同的颜色区
  • 通过 PHP 使用 R

    我对 R 比较陌生 对 Linux Ubuntu 命令行也很陌生 我正在尝试用 PHP 编写一个页面 其中包含我想在 R 中执行的命令 然后将结果传回以便能够使用它们 我尝试了下面代码的变体 但我只得到 R 欢迎消息作为我的输出 当我在命令
  • 完成后如何杀死 doMC 工作人员?

    doMC 的文档似乎非常稀疏 仅列出了 doMC package 和 registerDoMC 我遇到的问题是我将通过 doMC foreach 生成几个工作人员 但是当工作完成后 他们只是坐在那里占用内存 我可以去寻找他们的进程ID 但我
  • 如何配置 Play! 2.4.2 HTTPS 密钥库?

    我是 Play Framework 的新手 只是尝试在 Java 8 上首次使用 2 4 2 来使用 HTTPS 我可以让它使用默认密钥库 但不能使用我自己的密钥库 我配置了working默认密钥库位于build sbt javaOptio
  • Android 版 Google 地图 V2 上圆圈上的 LatLng 点

    I need to store all the LatLng points of circle drawn on google map like 我有圆和半径 以米为单位 如何得到那个 我尝试使用代码 private ArrayList
  • 重置数据表中的自动增量

    我填充一个DataSet with a DataAdapter to a SQL CE数据库 数据显示在DataGrid它绑定到 DataSet 的 DataTable 我有一个自动递增 ID 字段 或在 SQLCE 中 称为PRIMARY
  • UITableViewCells 中的图像加载错误

    我正在开发一个应用程序 我想在带有自定义单元格的 UITableView 中显示几乎与屏幕大小一样大的图像 图像加载良好 有点慢 但它们加载了 但是当我在 TableView 中滚动时 它们出现在错误的单元格中 例如 单元格 5 中的 Im
  • ASP.Net MVC 将标签值回发到您的控制器

    使用 EditorTemplate 时 如果我希望模型上的值显示在屏幕上 同时又发布回控制器 我应该使用什么助手 IE 如果我使用 TextBoxFor Html TextBoxFor model gt model RoomTypeName
  • 如何使用指针从不同的函数访问局部变量?

    我可以访问不同函数中的局部变量吗 如果是这样 怎么办 void replaceNumberAndPrint int array 3 printf i n array 1 printf i n array 1 int getArray int
  • Oct2Py 仅返回第一个输出参数

    我使用 Oct2Py 是为了在我的 Python 代码中使用一些 M 文件 假设我有这个简单的 Matlab 函数 function a b toto c a c b c 1 end 如果我在 Octave 中调用它 会发生什么显然是 gt
  • 当没有任何变化时如何强制更新 MySQL 记录

    我的数据库表有一列定义要使用ON UPDATE CURRENT TIMESTAMP 字段 last access 类型 时间戳 整理 属性 更新 CURRENT TIMESTAMP Null No 默认值 CURRENT TIMESTAMP
  • 如何使用 Python Mock 引发异常 - 但将 Errno 设置为给定值

    给定以下 Python 代码 elif request method DELETE try os remove full file return jsonify results purged s full file except OSErr
  • ES6 对象字面量中的简洁方法和非简洁方法

    let module add function a b return parseInt a parseInt b sub a b return parseInt a parseInt b 使用这两种方法的根本区别是什么concise方法语法