ES6 之前的类中的静态函数

2024-01-06

我的问题,见下文,是如何声明 STATIC 函数和常量pre-ES6类所以它们可以被继承?

在问题之前我们已经对当前的 ES6 类和 ES6 之前的类进行了回顾,因此我们都使用相同的约定。

在 ES6 之后,我们可以在类中定义静态函数,如下所示:

class MyClass {
    static someMethod () {
        console.log('Doing someMethod');
    }
}

在 ES6 之前,我可以创建一个基类,如下所示:

var MyClassBase = function(str){
    this.m_Data = str; // This acts a bit like a constructor where you can assign data within the class
};

您可以使用以下命令创建 ES6 之前的实例

var myclassbase = new MyClassBase("Wibble");

您可以创建该类的 ES6 之前的非静态成员函数:

MyClassBase.prototype.EchoData = function(){
    console.log(this.m_Data);
}

您需要一个实例来调用该非静态成员函数:

var myclassbase = new MyClassBase("Wibble");
myclassbase.EchoData();

为了继承,在 ES6 之前我会做类似的事情:

var MyClass = function(str){
    MyClassBase.call(this, str);
};
MyClass.prototype = new MyClassBase(); // inherit

[编辑]:但是 @adiga 在评论中建议(请参阅他们的有用链接),更好的方法是:

var MyClass = function(str){
    MyClassBase.call(this, str);
};
MyClass.prototype = Object.create(MyClassBase.prototype);
MyClass.prototype.constructor = MyClass;

这就是全部背景。现在关于静力学的问题。

问题:ES6 之前的版本如何在基类中创建静态函数MyClassBase无需实例即可调用,例如:

MyClassBase.StaticFunctionInMyClassBase();
MyClass.StaticFunctionInMyClassBase(); // This could be the inherited function from MyClassBase,
                                        // or may be a redefined overridden function in MyClass

问题:如何将静态常量分配给MyClass and MyClassBaseES6 之前的版本可以在没有实例的情况下访问吗?例如,

var result = MyClassBase.TWO_PLUS_TWO; // Echos 4, a predefined static value in MyClassBase
var result = MyClass.TWO_PLUS_TWO; // Echos 5, if TWO_PLUS_TWO has been redefined in MyClass,
                                        // or 4 if TWO_PLUS_TWO has no been redefined in MyClass

凯的建议:静态可以包含在以下内容中:

var MyClassBase = function(str){
    this.m_Data = str;
};
MyClassBase.STATIC_STRING = "Ooops";

但是,当我创建我的课程时MyClass它继承了MyClassBase, then MyClass.STATIC_STRING is undefined。我只能通过以下方式访问“Ooops”MyClassBase.STATIC_STRING。这是正常的班级惯例吗?


如何创建无需实例即可调用的静态函数,以及如何分配无需实例即可访问的静态常量?

方法和常量都只是类(构造函数)对象的属性,并且是通过赋值创建的:

var MyClassBase = function(str){
    this.m_Data = str;
};
MyClassBase.STATIC_STRING = "Ooops";

也可以看看JavaScript:Class.method 与 Class.prototype.method https://stackoverflow.com/q/1635116/1048572 or JavaScript 中的静态变量 https://stackoverflow.com/q/1535631/1048572.

当我创建我的班级时MyClass它继承了MyClassBase, then MyClass.STATIC_STRING未定义。这是正常的班级惯例吗?

是的,这在 ES5 继承中是正常的。为了模拟ES6,你需要手动设置构造函数的原型 https://stackoverflow.com/q/28674356/1048572:

Object.setPrototypeOf(MyClass, MyClassBase);

(or in ES5, one did use the now-deprecated __proto__).

但请注意,经常你想明确提及MyBaseClass anyway https://stackoverflow.com/a/28648214/1048572.

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

ES6 之前的类中的静态函数 的相关文章

随机推荐

  • iPhone Safari:滚动 html 容器内的列表

    我对此主题进行了大量研究 但尚未找到令人满意的答案 如何在其他 html 内容中制作可滚动列表 iPhone SDK 仪表板列表 如果我在 html 正文中创建一个列表并尝试滚动整个页面就会滚动 我知道有这种 双指 滚动 但这不是我想要的
  • 如何动态改变html元素的值?

    我试图在页面加载时在 UI 上加载初始参数虚拟数据 以便我可以使用真实数据进行自定义 因此在下面的代码中 当我在 UI 上更改并发送请求时 它总是采用最初加载到页面的 memberid 任何想法代码有什么问题吗 主要 html
  • 如何在opencart产品中设置自定义价格?

    我已经下载了最新版本的opencart 3 0 2 0 我的产品的定价取决于各种选项 即 尺寸 颜色 数量 对于数量 有没有默认设置价格范围的功能 例如1 500件一个价格 从501 1000折扣价 我的产品是腕带 所以我根据text他们想
  • 在技​​术绘图中绘制距离箭头

    我想在我的一幅图中指出距离 我想到的是他们在技术图纸中的做法 显示一个双头箭头 其旁边的距离为文本 Example from matplotlib pyplot import hlines 7 0 2 linestyles dashed h
  • 如何使用 ImageSharp 清除图像的 EXIF 数据?

    我发现一个 GitHub 问题 显示如何通过将其 ExifProfile 设置为 null 来删除图像的 exif 数据 SixLabors ImageSharp Image image Image Load imagePath remov
  • Kill -3 或 jstack :有什么区别?

    我想获取在 jboss 服务器上运行的 Web 应用程序的线程转储 我为我的问题找到了两个解决方案 使用unix命令 kill 3 使用JDK中存在的jstack工具 谁能向我解释这两种方法之间的区别 提前致谢 The jstack命令可以
  • 为什么 html 标签(s、strong)在 jasper 报告中不起作用?

    我添加了静态文本 html 标签 但单击预览后粗体和删除线无法正确显示 此外 当从数据库加载数据时 它无法正确显示 有什么解决办法吗 Jasper Report不支持所有html标签 支持的标签定义在样式文本示例 http jasperre
  • 导出的 pdf 中缺少 Jupyter 笔记本 matplotlib 数字

    在 jupyter 笔记本中生成 pdf 时 一切都很好 但我想将内联数字保留在 pdf 以及笔记本中 这是我的代码 matplotlib notebook import matplotlib pyplot as plt import nu
  • Xcode 7.3 - 警告未显示且无法搜索项目

    自从我升级到 Xcode 7 3 以来 我注意到在搜索工作区时总是 没有结果 并且警告窗格中也没有显示任何警告 有时它会工作几分钟然后再次死机 重新启动我的电脑 Xcode 然后重新安装都没有帮助 还有其他人遇到过这种情况或找到解决方案 解
  • 错误:预期声明说明符或“list_node”之前的“...”

    我有一个 Catalog h 文件 typedef struct node list node struct node operationdesc op ptr list node next 和一个 parser h 与此 include
  • 为什么我需要 DJANGO_SETTINGS_MODULE 设置?

    每次通过 SSH 登录服务器时 我都需要输入以下内容 export DJANGO SETTINGS MODULE settings 如果我不使用manage py模块就会失败 我的manage py添加了以下代码 if notificati
  • 在数据库上创建程序集时部署 SQL CLR 项目失败

    我用来创建程序集的服务器上的文件夹中有一个包含 3 个 dll 文件的文件夹 我首先尝试了以下代码 并收到一个错误 表示在服务器上找不到 system data datasetextensions dll 文件 我将 dll 从我的计算机复
  • 如何共享对 Firebase Analytics 数据的访问而不暴露 Firebase 的其余部分?

    我知道如何向 Firebase 项目添加协作者 并且可以为每个协作者分配特定的角色 这些角色与某些权限相关联 然而 似乎没有一个角色符合我的要求 我想与非技术营销人员共享 Firebase Analytics 的访问权限 我必须避免将 Fi
  • IIS - 以编程方式重置 SSL 会话

    我有一个 IIS 7 5 Web 应用程序 客户端使用双向 又称双向 SSL 连接到该应用程序 客户端证书由智能卡提供 我需要让网络应用程序超时 当超时发生时 我想销毁 SSL 会话 假设在 IIS 上 从而强制客户端重新进行身份验证 如何
  • 原型点击、鼠标悬停和鼠标移开不能一起工作?

    我正在尝试做一个非常简单的按钮 它根据鼠标悬停 鼠标移出和改变颜色 单击 我正在原型中执行此操作 奇怪的是如果我使用鼠标悬停和鼠标移出 单击按钮后 按钮不会变为白色 似乎是因为鼠标移开 这是我的代码 izzy observe mouseov
  • 可以发出 cURL 请求并获取所采用的路由(类似于traceroute)

    我有一个带有标头参数的 GET 请求 我想检查我的应用程序正在使用哪个数据库实例 有没有办法构建一个 cURL 请求来告诉我我的请求要去哪里 我知道有一个traceroute显示所有服务器跃点的命令 但是有没有类似于使用 cURL 的东西呢
  • 垂直于给定点的线段

    我想计算给定线上与给定点垂直的点 我有一条线段AB 在线段外有一个点C 我想计算AB上的点D 使得CD垂直于AB 我必须找到D点 它非常类似于this https stackoverflow com questions 1811549 pe
  • 从 XIB 到故事板

    我有一个带有故事板和一个 xib 窗口的应用程序 从情节提要到 xib 我以这种方式移动 ShowDreamNIBController detailViewController ShowDreamNIBController alloc in
  • Java如何在jar环境而不是IDE中读取文件夹并列出该文件夹中的文件

    我的问题是我在 src 下创建一个文件夹 名称是 IconResources 在 IconResources 中有很多图片 目录是这样的 ProjectName src 套餐1 套餐2 IconResources 这是目标文件夹 我想列出所
  • ES6 之前的类中的静态函数

    我的问题 见下文 是如何声明 STATIC 函数和常量pre ES6类所以它们可以被继承 在问题之前我们已经对当前的 ES6 类和 ES6 之前的类进行了回顾 因此我们都使用相同的约定 在 ES6 之后 我们可以在类中定义静态函数 如下所示