基于类和基于对象的语言比较(ECMAScript 规范)

2023-12-23

In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, while structure, behaviour, and state are all inherited.

这是 ECMAScript 规范 2015 年 6 月的片段。我不理解本文的部分内容。

  • 状态由实例承载 - 在此上下文中状态意味着什么以及示例(首选 c++)
  • 方法由类携带 - 这可能意味着,如果我想知道对象的方法,我需要查看该对象的类。
  • 继承仅是结构和行为——仅继承结构和行为?
  • 等等...

谁能详细解释一下吗?例子就很好了。


好吧,我来尝试回答一下这个问题。

ECMAScript 6 类作为语法糖的背景

ES6 类只是 ECMAScript(又名 JavaScript)中普通原型继承的语法糖。

class Foo {
    constructor(a, b) {
      this.c = a;
      this.d = b;
    }

    static bar() {}

    another() {}
}

这相当于:

function Foo(a, b) { 
  this.c = a; 
  this.d = b; 
}

Foo.bar = function() {};

Foo.prototype = {
  another: function() {}
};

不过,在 ES6 中进行继承比旧方法要容易得多:

class Foo extends Bar {
    ...
}

在 ES5 或更早版本中做同样的事情很容易出现问题,但这有点偏离主题。

问题

状态由实例承载 - 在此上下文中状态意味着什么以及示例(首选 c++)

类的实例是类似于 C++ 的对象。

class Foo {
  constructor(a) {
    this.value = a;
  }

  getValue() {
    return this.value;
  }
}

var foo = new Foo(42);
console.log(foo.getValue()); // prints 42

等价于 C++:

class Foo {
private:
  int value;  
public:
  Foo(int a) : value(a) {}

  int getValue() {
    return value;
  }
};

void main() {
  Foo foo = new Foo(42);
  std::cout << +foo.getValue() << std::endl;
}

如您所见,实例类的行为在 ES6 和 C++ 中是相同的,但是没有字面上的等价物private or publicES6 中的封装。

方法由类携带 - 这可能意味着,如果我想知道对象的方法,我需要查看该对象的类。

在 ECMAScript 中,您可以重写类实例上的函数,因为它就像其他所有东西一样只是一个对象。

var foo = new Foo(42);
foo.getValue = function() { return this.value + 1; };
console.log(foo.getValue()); // returns 43
console.log(foo.constructor.prototype.getValue.call(foo)); // returns 42

Using .constructor.prototype当对象被实例化时,对象的原型得到该对象的原型new关键词。

继承仅是结构和行为——仅继承结构和行为?

他们选择的措辞很麻烦。我相信他们的意思是,就像在 ECMAScript 中一样,类的实例就像其他任何对象一样,您可以修改几乎所有内容,而在 C++ 中,类的实例有更严格的要求。您不能向实例添加新方法,不能添加新属性,也不能打破语言为您提供的约束。

我希望这回答了你的问题。如果有什么不清楚的地方,请评论,我会编辑。

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

基于类和基于对象的语言比较(ECMAScript 规范) 的相关文章

  • Oo 任何 IDE 中的 javascript 代码补全

    你知道有什么IDE可以自动完成这种代码吗 我这里有一个 javascript 类生成器 function var core bind function method scope if method instanceof Function t
  • 如何使用 selenium 和 Mocha 获取 xPath() 选择的锚标记的文本

    我已经成功选择了 a 标签 我想显示锚标记的文本 但无法这样做 我正在使用 selenium mocha javascript 和 phantomJS 这是我的脚本 详细 var assert require assert var test
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • HTML2canvas 和 Canvas2image,下载的屏幕截图不显示我的 HTML 图像

    我一直在开发一个 HTML 页面 我想将其转换为图像 我一直在使用 html2canvas 和 canvas2image 脚本并采用此代码http jsfiddle net 8ypxW 3 http jsfiddle net 8ypxW 3
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 如果数字小于 10,则显示前导零 [重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 相当于 printf string format https stackoverflow com questions 610406 javascript equivalent t
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • PHP - 上传多个文件

    我正在开发一个 WordPress 插件 我希望能够从表单上传多张图片 现在 当我有两张图片的表单并将其提交为空时 我的 FILES 数组如下所示 Array image gt Array name gt Array 1 gt 2 gt t
  • 计算 MySQL 中父子模型的深度

    MySQL下父子模型如何计算节点深度 我需要深度 除其他外 在我的列表中创建缩进 用 PHP 编码 这取决于数据库中层次结构的实际实现 如果您使用嵌套集模型 http mikehillyer com articles managing hi
  • MongoDB - MySQL SUM(何时)等效?

    我正在尝试使用 Mongo 进行一些测试 我已经找到了一些与 Mongo 等效的更简单的 MySQL 查询 我的查询有点复杂 我需要帮助 SELECT DISTINCT dims user COUNT DISTINCT asset name
  • FlatBuffers 有大小限制吗?

    我可以在 FlatBuffer 中存储 100GB 的字符串吗 10 TB 2023 年您可以购买服务器拥有更多的内存 https www google com search q your data fits in ram 它是否仅受我的服
  • “var foo = function bar (){ ... }”中“bar”的用途是什么?

    在 Douglas Crockford 的书中 他将递归函数写为 var walk the DOM function walk node func func node node node firstChild while node walk
  • 如何在 WordPress 上正确包含 jquery-ui 效果

    我一直在尝试在我的 WordPress 主题中包含 jquery ui 效果 更具体地说是抖动效果 到目前为止 我只能包含 jQuery 脚本 但我真的不知道在哪里放置 ui 脚本以及如何将它们排入队列 这是我的代码 它显然不起作用
  • 带日期轴的javafx折线图

    我正在尝试在 JavaFX 中创建折线图 该折线图应具有一个带数字的轴 y 和另一个带日期的轴 x 日期范围应由用户使用两个日期选择器来选择 现在这是我的问题 折线图只有类别和数字轴 有没有办法将日期整合到图表中 我遇到了同样的问题 唯一的
  • Django、Angular 和 DRF:Django 后端与 API 的身份验证

    我正在构建一个具有 Django 后端 Angular 前端和 REST API 的应用程序 使用 Django REST Framework 供 Angular 使用 当我仍在使用普通前端开发后端内容时 我使用提供的 Django 身份验
  • 使用 Swift 的 UITableView 和 MVVM

    我正在尝试MVVM架构在斯威夫特与UITableView 为此 我创建了示例表视图 任何人都可以建议我是否正确或需要做任何其他改进吗 以下是该架构的类 视图控制器 包含UITableView和它的delegate and datasourc
  • CPAN 安装新模块是否会影响同一实时生产服务器上的 Perl-CGI 应用程序?

    我在 CentOS Linux 网络服务器上有一些 Perl CGI 程序 我希望编写更多需要当前未安装的 Perl 模块的应用程序 在同一实时生产服务器上运行 CPAN 是否会以任何方式影响这些程序 显然 当前不使用这些模块 有一种可能的
  • 具有 Google 会话和帐户选择器的移动应用浏览器的行为

    问题 尝试在移动应用程序之间创建 SSO 和浏览器 我们有什么 我们有一个离子移动应用程序 使用 OAuth 2 0 身份验证 通过 Google 登录 我们有多个适用于 OAuth2 和 SAML 的内部应用程序 因此 我们为 GSuit
  • 从 C# 表单登录 Skype

    我没有找到如何从 C 表单登录到 Skype 有可能这样做吗 例如我在表单中输入用户名和密码 当我单击 登录 时 Skype 实例将启动并使用我的凭据记录我 多谢 您可以使用命令行参数启动 Skype 如下所示 skype exe user
  • Angular cli 排除“ng test --code-coverage”的文件/目录

    我正在运行以下命令来进行单元测试并生成代码代码覆盖率报告 ng test code coverage 它工作正常并在中编写代码覆盖率报告coverage folder 在这里我得到了所有文件和目录覆盖率报告 但我想排除特定的文件 目录src
  • 将 JS 对象数组发布到 Spring MVC 控制器

    我正在尝试将长数组从 jquery load 传递到 spring 控制器 我如何向 spring mvc 控制器发送 js 对象数组 每次发生操作时 都会调用脚本上的无数据警报 Script var arr Array document
  • 如何使用 UI 自动化库单击“窗格”?

    我们有一个应用程序 我需要在其中单击一个窗格 我尝试使用以下代码 我用它来单击按钮 但它给出了不支持的模式异常 InvokePattern click pattern InvokePattern adjust button GetCurre
  • WPF 中的 OpenGL 控件 - 如何操作?

    我需要在我的 WPF 项目中使用 OpenGL 我希望它的安装尽可能简单 但我开始失去希望 我试过了SharpGL 它非常好且易于使用 但它存在大量内存泄漏 并且应用程序在几秒钟后崩溃 不是很有用 所以现在我想知道 这个库有替代方案吗 实际
  • 如何在运行浏览器化脚本之前设置 process.env?

    最初的html来自后端 服务器有一个定义的process env NODE ENV 以及其他环境变量 浏览器化的代码是建造一次 and 在多个环境上运行 staging production等 因此不可能将环境变量内联到浏览器化脚本中 通过
  • 如何在 will_paginate gem 中进行无限滚动

    我正在尝试无限滚动 但我不知道为什么它不起作用 allposts html erb 部分 div class iterate div 职位控制器 class PagesController lt ApplicationController
  • 代码行数旁边的垂直线是什么

    这些线到底是用来做什么的 扩展程序的名称是什么 这些行表示文件中的更改 蓝线表示修改 修改了代码行 绿线表示添加 添加了代码行 红线表示删除 删除了代码行 它们是通过版本控制系统 VCS 扩展 例如 Git 添加的 您可以在上面找到具有相似
  • 基于类和基于对象的语言比较(ECMAScript 规范)

    In a class based object oriented language in general state is carried by instances methods are carried by classes and in