JavaScript“类”的规范术语[关闭]

2024-06-08

这是一个在 JavaScript 中定义“类”、创建它的实例并调用它的方法/函数之一的简单示例

// Define a class like this
function Person(name, gender){

   // Add object properties like this
   this.name = name;
   this.gender = gender;
}

// Add methods like this.  All Person objects will be able to invoke this
Person.prototype.speak = function(){
    alert("Howdy, my name is" + this.name);
};

// Instantiate new objects with 'new'
var person = new Person("Bob", "M");

// Invoke methods like this
person.speak();

之所以在开头句中使用引号,是因为上面根本不是真正的类,因为 JavaScript 没有类。那么,用什么词来形容上述内容最好呢?

我知道Person是构造函数并且speak是一种方法,但是构造函数及其方法的整体规范术语是什么?显然,在 Java、C++、C# 等中,它被称为类,但我不确定 JavaScript 中的等效术语是什么?


JavaScript 没有类,但我仍然称其为类。 ECMAScript Harmony 将推出classes http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classesJavaScript(尽管它们不是真正的类)。这是您的代码在 ECMAScript Harmony 中的外观:

class Person {
    constructor(name, gender) {
        this.name   = name;
        this.gender = gender;
    }

    speak() {
        alert("Howdy, my name is " + this.name + ".");
    }
}

var person = new Person("Bob", "M");

person.speak();

这可以在当前的 JavaScript 中模拟如下:

var Person = defclass({
    constructor: function (name, gender) {
        this.name   = name;
        this.gender = gender;
    },
    speak: function () {
        alert("Howdy, my name is " + this.name + ".");
    }
});

var person = new Person("Bob", "M");

person.speak();

function defclass(prototype) {
    var constructor = prototype.constructor;
    constructor.prototype = prototype;
    return constructor;
}

正如你所看到的defclass函数接受一个原型对象并返回一个“类”。每个类都必须有一个构造函数。

面向对象的编程语言有两种类型:经典语言和原型语言。

类和原型是同构的(即原型可以转换为类,类也可以转换为原型)。有关更多详细信息,请参阅以下问题的答案:

如何在类声明上实现伪经典继承? https://stackoverflow.com/q/18753802/783743

原型类同构

上图取自对以下问题的回答:

JavaScript 继承和构造函数属性 https://stackoverflow.com/q/8093057/783743

在您的问题中,您要求一个术语来描述构造函数及其方法的整体。

构造函数及其方法都是原型对象的属性。因此,整体的规范术语是“原型”。

但是,由于原型和类是同构的,因此您也可以将其称为“类”。

以下问题的答案解释了原型如何与类同构:

JavaScript 中的经典继承与原型继承 https://stackoverflow.com/q/19633762/783743

回顾一下,您要求的术语是“原型”。原型与类同构。因此你也可以将其称为“类”。原型有一个构造函数方法,通常用于创建原型的实例。构造函数不是整体,而是整体的一部分。

原型与类

到目前为止,我只指出原型与类同构,而没有说明如何同构,因为我不想重复我之前的答案。然而,一些重复是好的。

正如我之前所说,面向对象语言有两种类型:经典语言和原型语言。在古典语言中,有两个独立的事物:抽象(对象)和泛化(类)。

简单解释一下抽象和泛化:

  1. 对象是现实世界实体的抽象。例如,鲍勃是一个现实世界的实体。在计算机程序中,Bob 使用具有以下属性的对象来表示name and gender。这个对象不是鲍勃。它只是 Bob 的抽象(即它描述了 Bob)。
  2. 抽象的抽象是概括。在经典语言中,泛化是用类来表示的。在原型语言中,泛化是使用原型对象来表示的。例如,Person类和Person.prototypeobject 都是 Bob 的概括(或者代表 Bob 的对象的抽象)。

因此,对象是现实世界实体的抽象,类和原型都是泛化(即抽象的抽象)。

经典语言和原型语言之间的区别在于,在经典语言中,对象只是现实世界实体的抽象。类用于创建对象或其他类的抽象。

在原型语言中,对象是现实世界实体和其他对象的抽象。当一个对象是另一个对象的抽象时,它被称为原型对象。

因此,从某种意义上说,原型和类是双重概念。它们代表同一件事(即概括)。这就是为什么它们是同构的。

因为您所引用的构造函数及其方法的“整体”本质上是一个原型对象,所以它可以简单地称为“原型”,也可以扩展为“类”。然而,它不能被称为构造函数(它只是整体的一部分)。

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

JavaScript“类”的规范术语[关闭] 的相关文章

  • 在 JavaScript 中使用 Array.map 删除元素

    我想使用以下方法过滤一系列项目map 功能 这是一个代码片段 var filteredItems items map function item if some condition return item 问题是过滤掉的项目仍然使用数组中的
  • Angular 2 TypeError:无法读取 null 的属性“animate”

    我正在使用 Chrome 51 和 Angular 2 rc4 并在加载我的 Angular 应用程序时在控制台中弹出以下错误 TypeError Cannot read property animate of null at e supp
  • 可以跨 iframe 共享 javascript 导入吗?

    我有一个 Web 应用程序 其中有多个 iframe 它们都需要导入相同的 javascript 库 例如 jquery 有没有办法只加载一次并以某种方式在所有 iframe 之间共享该数据 我不想让我的页面加载缓慢 因为它为每个 ifra
  • 用玩笑模拟高阶组件

    我想确保 HOC 组件被开玩笑地调用 但我似乎无法理解jest mock上班 我的 HOC 是这样的 const withEntity args gt const wrappedComponent WrappedComponent gt c
  • 如何在 Jasmine JS 中重用 beforeEach/afterEach?

    当使用 JasmineJS 编写测试时 我有许多具有类似 beforeEach afterEach 代码的测试 有没有办法使用 JasmineJS 测试套件实现继承模型 我可以将所有测试分组为一个describe但在这种情况下 我将以包含所
  • 如何使用 html 标签包装 window.getSelection().getRangeAt(0) 中的文本选择?

    如何从 window getSelection getRangeAt 0 中进行选择并用 HTML 标签 例如 span 或 mark 包围它 我更喜欢直接的 javascript 或 jQuery 解决方案 我可以使用警报输出选定的文本
  • 如何在 Bootstrap 中将单选按钮设置为“选中”? [复制]

    这个问题在这里已经有答案了 我使用 Bootstrap 按钮作为单选按钮 http getbootstrap com javascript buttons http getbootstrap com javascript buttons 这
  • 获取访客的 Optimizely A/B 测试和变化

    当我在网站上运行实验时 我希望能够找出当前访问者看到的测试和变体 我无法找到如何做到这一点优化Javascript API https www optimizely com docs api 您可以获得第一个正在运行的实验的 ID 假设您有
  • Bootstrap 页脚不在底部

    我试图强制我的页脚位于网站底部 我不希望它在滚动时粘住 只是在向下滚动网页时出现在底部 目前 网页显示时页脚位于内容下方 我添加了这样的代码bottom 0 并发现它粘住了并且不适合我的网站 我还添加了这样的代码html body heig
  • 通过标记或JS强制下载

    假设我在 CDN 来自 Rackspace 的云文件 上有一个文件 以及一个包含该文件链接的静态 html 页面 有什么方法可以强制下载此文件 以防止它在浏览器中打开 例如 mp3 我们可以让我们的服务器读取该文件并将相应的标头设置为 he
  • `forEach` 函数中的 `return` 关键字是什么意思? [复制]

    这个问题在这里已经有答案了 button click function 1 2 3 4 5 forEach function n if n 3 it should break out here and doesn t alert anyth
  • javascript 中的工厂模式与构造函数模式[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我看到了关于 javascript 设计模式的教程 虽然教程很好 但它给我留下了很少的问题 正如我所见 工厂和构造函数产生相同的结果
  • LightningChart JS - LineSeries / Progressive X 的损坏

    我在使用 LightningChart 时遇到了一个有趣的问题 它似乎会破坏或以其他方式减少我的数据 具体取决于它与图表的 DateOrigin 的距离 我的数据是每秒 1000 个样本 我试图一次显示 1 2 周的数据 我正在使用 Cha
  • Lighthouse 多个 URL

    我需要对一个网站进行全面审核 但我想知道是否有任何方法可以让 Lighthouse 做到这一点 我知道他们不支持完整的站点审核或多个 URL 但我发现可以使用 bash 脚本来完成 因此 我将不胜感激对此案的任何帮助 或者您可能会推荐任何灯
  • Google Maps API - 调整大小会生成空白区域

    我正在研究一个看起来非常简单的功能 但却引起了一些头痛 我使用 GIS 并将其与 Google 地图集成 其中一位客户要求能够打开一个仅显示地图的单独弹出窗口 打开窗口不是问题 但当我尝试扩展包含地图的 IFrame 的宽度时 为了适应窗口
  • React cloneElement 未设置键

    我正在构建一个动态生成键的表控件 我理解这可能不是一个好主意 我想键应该与其代表的数据唯一关联 否则 React 只能为我们生成唯一的 id 但无论哪种方式似乎没有设置按键 我不知道为什么 表中的行是用可以找到的函数生成的here http
  • JavaScript 模板文字稍后替换变量(在知道值之前)

    是否可以在已知值之前以某种方式使用模板文字 JS 模板文字的每个演示都如下所示 var name John var s Hello name 但在现实世界中 模板是在我们知道变量值之前定义的 某处定义了模板 在页面加载时 var s Hel
  • Javascript - 通过键获取特定 JSON 数组元素内的属性值

    我有一个像这样的 JSON 结构 map key1 valueA1 key2 valueA2 key3 valueA3 key1 valueB1 key2 valueB2 key3 valueB3 key1 valueC1 key2 val
  • 将json数据从servlet传递到jsp到js文件

    我得到了这个创建 JSON 数据的 servlet 我想将此数据传递到一个 jsp 页面 该页面应该通过 InfoVis 工具包显示数据 servlet java JSONObject json new JSONObject JSONArr
  • 如何使用 JQuery 创建新的 img 标签,并使用 JavaScript 对象中的 src 和 id?

    我从基本意义上了解 JQuery 但对它绝对是新手 并且怀疑这很容易 我在 JSON 响应中获得了图像 src 和 id 转换为对象 因此在 responseObject imgurl 和 responseObject imgid 中获得了

随机推荐

  • 由于递归结构中存在冲突的要求,无法推断适当的生命周期

    当我尝试编译这段代码时 pub struct Context lt a gt pub outer Option lt a mut Context lt a gt gt impl lt a gt Context lt a gt pub fn
  • SaveChangesAsync 不更新数据库表中的值

    这是我的桌子 统计数据 Id Depth RefreshCounter 样本记录 Id Depth RefreshCounter 1 1 1 2 1 0 3 1 0 4 1 0 现在我需要做的是 每当我刷新页面时 我需要在深度为 1 的数据
  • 一个 AVPlayerItem 一次只能在玩家队列中占据一个位置?

    我见过许多问题 https stackoverflow com questions 6605771 an avplayeritem can occupy only one position in a players queue at a t
  • 更改自定义 UITableViewCell iphone 中的文本颜色

    我有一个自定义单元格 当用户选择该单元格时 我希望两个 UILabels 中的文本更改为浅灰色 检查表Cell h import
  • C++“功能测试宏”的值是什么意思?

    为了测试某个功能 cppreference 提到了这些功能测试宏 link https en cppreference com w User D41D8CD98F feature testing macros 如果编译器中存在该功能 则定义
  • 了解路由表条目

    我想问一个关于Linux中route命令的问题 我已在 Linux 终端中输入以下命令 gt route 并得到输出 Destination Gateway Genmask Flags Metric Ref Use Iface 192 16
  • 用Red语言制作GUI对象

    我有一个小面板的以下简单代码 view t text label f field button Click here t text f text 但我必须制作其中两个并将它们放在一个窗户上 我想创建单个对象类并从中创建 2 个对象 我看到可
  • 如何检测谷歌地图是否加载成功

    我在我的网站中使用谷歌地图版本 3 我遇到了地图有时无法加载的问题 而是显示为灰色框 并且浏览器日志将充满错误 不幸的是 我现在无法获取日志 因为地图再次工作 根据一些研究 问题是因为我使用的实验版本 有没有办法查明地图是否已成功加载或崩溃
  • 当 docker 停止时运行脚本

    我正在尝试使用 dockerfile 创建 docker 容器 其中 script entry sh 将在容器启动时执行 而 script exit sh 将在容器停止时执行 ENTRYPOINT 帮助解决了 script entry sh
  • WPF 将枚举列表(或类似的)绑定到复选框列表

    我想将复选框列表绑定到 WPF 中的枚举值集合 枚举不是 Flags 语境 它用于过滤数据网格 其中每个项目都有我的枚举的一个实例 它不一定需要绑定到列表 固定大小的集合也可以 假设您想绑定到枚举的所有可能值 您可以使用对象数据提供者 ht
  • 为什么类型级计算需要 Aux 技术?

    我很确定我在这里遗漏了一些东西 因为我对 Shapeless 还很陌生并且我正在学习 但是 Aux 技术实际上是什么时候required 我看到它是用来暴露type通过将其提升为另一个 同伴 的签名来声明type定义 trait F A t
  • 发送压缩文件 Spring

    我想通过我的 spring 控制器发送一个已经存在的压缩文件 但我不断收到这些错误消息org springframework web HttpMediaTypeNotAcceptableException Could not find ac
  • Angular 2 RC 2 如何将路由器注入自定义异常处理程序

    我正在使用 Angular 2 RC2 我需要将 Angular 2 Router 注入到我的自定义 ExceptionHandler 类中 但是我收到以下错误 错误 错误 无法解析 ErrorHandler 的所有参数 确保所有参数都用
  • Spring Batch-如何将文件本身作为项目处理?

    我是春季批量开发的新手 我有以下要求 将有一个带有 zip 文件的 s3 源 每个 zip 文件将包含多个 pdf 文件和 xml 文件 例如 100 个 pdf 和 100 个 xml 文件 xml 文件将包含有关 pdf 的数据 Bat
  • NSAttributedString - 获取字体属性

    我需要获取有关我的属性字符串的信息 但不知道如何获取 我得到这本词典 2013 11 04 18 06 10 628 App 1895 60b NSColor UIDeviceWhiteColorSpace 0 3 1 NSFont
  • 在 INSERT INTO....RETURNING 上添加 LEFT JOIN

    我的查询插入一个值并返回插入的新行 INSERT INTO event comments date posted e id created by parent id body num likes thread id VALUES 15757
  • 使用 Either 处理 Scala 代码中的故障

    Optionmonad 是 Scala 中处理有或无事物的一种很好的表达方式 但是 如果在 什么也没发生 时需要记录一条消息怎么办 根据 Scala API 文档 Either 类型通常用作 scala Option where Left
  • Flux Dispatch.dispatch(...):无法在调度中间调度

    My code https gist github com ButuzGOL 707d1605f63eef55e4af https gist github com ButuzGOL 707d1605f63eef55e4af 因此 当我收到登
  • keras LSTM 以正确的形状提供输入

    我从具有以下形状的 pandas 数据框中获取一些数据 df head gt gt gt Value USD Drop 7 Up 7 Mean Change 7 Change Predict 0 06480 2 0 4 0 0 000429
  • JavaScript“类”的规范术语[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这是一个在 JavaScript 中定义 类 创建它的实例并调用它的方法 函数之一的简单示例 Define a class like this