正确使用 JavaScript 接口关键字

2024-02-06

首先,不,我并不想为我的 JavaScript 代码创建任何类似 Java 的接口。我到处都见过这些问题,虽然我对 JavaScript 来说还是个相对新手,但我知道这些不是该语言的一部分。

不过,我很好奇它的实际用途是什么interface关键字是。例如,Math是一个接口,包含定义(但不包含实现)。我believe(可能是完全错误的)这些是为语言的定义者提供一种方法来强制在各种 JavaScript 引擎中实现一组行为。那是对的吗?

此外,我希望有一个包含一堆实用方法的“静态类”。我喜欢 Math.sqrt(3) 有一个大写的外部命名空间(“Math”),以及其中的许多逻辑上相似的方法和值。也许只是我的 Java/Ruby 背景让我想要对对象进行分组。这样的形式很糟糕吗?

var ShapeInspections = {
  isSymmetrical: function (s) {
    // determine if shape is symmetrical
  },
  numAngles: function (s) {
    // return the number of angles
  }
}

一个纯粹人为的例子,但是以这种方式命名“模块”是否不符合习惯用法?


好的,与其他答案一样,您知道关键字界面在 Javascript 世界中还没有真正的用例。

Your Math例子让我怀疑你正在谈论一种设计模式,称为模块模式,广泛用于确定 Javascript 代码的范围。有很多方法可以使代码模块化。例如,就像 OddDev 回答你一样,著名的原型模式可以以模块化方式嵌入您的代码(就像您的Math例子)。这里是揭示原型模式示例还有private变量和函数提供额外的灵活性:

/* Example from: 
    http://www.innoarchitech.com/scalable-maintainable-javascript-modules */
var myPrototypeModule = (function (){

   var privateVar = "Alex Castrounis",
       count = 0;

   function PrototypeModule(name){
    this.name = name;
   }

   function privateFunction() {
      console.log( "Name:" + privateVar );
      count++;
   }

   PrototypeModule.prototype.setName = function(strName){
      this.name = strName;
   };

   PrototypeModule.prototype.getName = function(){
      privateFunction();
   };

   return PrototypeModule;     
})();

但这还不是全部。其他选项包括范围模块模式, POJO模块模式还有很多。看一下如何编写高度可扩展和可维护的 JavaScript:模块 http://www.innoarchitech.com/scalable-maintainable-javascript-modules/,它有一组非常简单但又详尽的示例。

到目前为止,我们讨论了普通的 Javascript。如果您有能力在代码中使用库,那么令人惊叹的库,例如要求, CommonsJS可以在这方面帮助您吗盒子外面功能。看看 Addy Osmani 的帖子使用 AMD、CommonJS 和 ES Harmony 编写模块化 JavaScript http://addyosmani.com/writing-modular-js/.

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

正确使用 JavaScript 接口关键字 的相关文章

随机推荐

  • 如何在 Windows 7 64 位上调试 VB6 IIS 应用程序

    我需要能够在 Windows 7 64 位上调试 Visual Basic 6 IIS 应用程序 不仅仅是为了解决一个问题 而是为了持续发展 尝试调试会导致 WebClass 运行时出现错误 发生了未指定的错误 如果我不进行调试而只是访问编
  • 对 Azure Cosmos DB 中的嵌套字段建立索引

    我想在 Azure Cosmos DB 文档中的嵌套字段上创建索引 例如 如果我有以下架构 id 1 nested mode mode1 text nice text 我想在该字段上创建索引nested mode 如何才能做到这一点 Ans
  • 如何在Eclipse控制台打印[简体]汉字?

    我有以下代码 import java io PrintStream import java io UnsupportedEncodingException import java util Locale public final class
  • 点击刷新时,IIS 上出现路由 404 错误

    我没有找到这个问题的解决方案 但我已经尝试了各种解决方案 但没有任何效果 我有一个 React JS 应用程序 当部署在测试服务器上并且您在页面上点击刷新时 我收到 404 错误消息 我尝试过 URL 重写 这有助于导航回主页 但这并不能解
  • 如何使 DateTime 独立于当前文化?

    我尝试将日期时间转换为字符串并返回 但使其适用于所有文化 我基本上有一个文本框 tbDateTime 和一个标签 lbDateTime 该标签告诉用户 软件期望以哪种格式输入 tbDateTime 文本框的输入将用于 MySQL 命令 目前
  • Angular ng 使用不同的“配置文件”构建

    在 Maven Java 中 可以构建具有不同 配置文件 的 Web 应用程序战争 配置文件 指示例如要放入配置文件中的 Web 服务的 URL 因此 测试配置文件 将指示与 生产配置文件 不同的 URL 有没有类似于 ng build 的
  • Swift - 如何在单击时使图像全屏显示,然后在再次单击时使图像变为原始大小? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于我正在制作的应用程序 我希望用户能够单击图像以使其在应用程序上全屏显示 然后用户可以单击现在的全屏图像以使其恢复原始大小 这可能吗
  • 我不明白 format() 和 ... (python) 之间有什么区别

    这里是困惑的新手 使用有什么区别 print So you are 0 years old format age AND print So you are age years old 两者都有效 其实差别很大 前者使用字符串format h
  • 汇编中的纯高位乘法?

    为了实现 0 到 1 之间的实数 通常使用 ANSI 浮点数或双精度数 但是 0 到 1 之间的固定精度数字 小数模 1 可以有效地实现为 32 位整数或 16 位字 它们像普通整数 字一样相加 但乘以 错误的方式 这意味着当您乘以 X 倍
  • gem 服务器:如何更新缺少 rdoc 的 gem?

    我很喜欢gem server使用本地 RubyGems 文档索引引导 Web 服务器的命令 我唯一的问题是 有些 gems 没有 rdoc 文件 如何添加缺失的rdoc 所有gem都是主流gem 不是我自己的 通过Bundler安装 导轨2
  • 电子生成器应用程序大小太大

    我发现使用 Electron builder 生成的 MyApp exe 文件有将近 500M 左右 我不确定我做了什么 因为以前 仅对于 ia32 或 x64 它大约是 196M 我也看了这个link https stackoverflo
  • 矢量上的段错误

    我创建了一个结构来保存一些数据 然后声明一个向量来保存该结构 但是当我执行 Push back 时 我遇到了该死的段错误 我不知道为什么 我的结构定义为 typedef struct Group int codigo string name
  • 查找最大值并显示 SQL Server 中不同字段的相应值

    我有一个表 其中包含有关城市的数据 其中包括城市名称 人口和与我的问题无关的其他字段 ID Name Population 1 A 45667 2 B 123456 3 C 3005 4 D 13769 找到最大人口是基本的 但我需要一个结
  • python 在 x 轴上旋转值以不重叠

    I m having some problems with the xticks of the graph here 有人可以帮忙吗 我尝试了他们在这里所做的事情 matplotlib 中的日期刻度和旋转 https stackoverfl
  • 如何设置 Facebook 分享图片(仅作为后备)?

    我们当然可以使用以下命令来设置默认共享图像 但是 有没有办法将其设置为仅后备 而不是默认值 这意味着 只有当 Facebook 无法从博客文章中找到更大 更合适的图像时才可以使用 注意 Facebook 已经自动自行抓取 无需网站所有者的任
  • tensorflow-gpu 无法与 Blas GEMM 一起使用 启动失败

    我安装了tensorflow gpu 以在GPU 上运行我的tensorflow 代码 但我无法让它运行 它不断给出上述错误 以下是我的示例代码 后面是错误堆栈跟踪 import tensorflow as tf import numpy
  • Django 不允许的主机

    我刚刚开始第一次接触 Django 所以我创建一个 django 项目并运行命令 python3 manage py runserver 0 0 0 0 8000 我没有得到预期的 django 主页 而是收到以下错误消息 Disallow
  • 未使用模板专业化

    我定义了以下函数 template
  • Swift 中有多少种编写闭包的方法?

    问题 在 swift 中编写任何闭包时需要考虑哪些基本规则和边界 就语法而言 闭包有多种类型 我们可以使用带有 void return 单参数返回和多返回类型的闭包 我们可以用inout typealaise escaping autocl
  • 正确使用 JavaScript 接口关键字

    首先 不 我并不想为我的 JavaScript 代码创建任何类似 Java 的接口 我到处都见过这些问题 虽然我对 JavaScript 来说还是个相对新手 但我知道这些不是该语言的一部分 不过 我很好奇它的实际用途是什么interface