javascript - 正确使用 JavaScript 接口(interface)关键字

标签 javascript

首先,不,我并没有尝试为我的 JavaScript 代码创建任何类型的 Java 类接口(interface)。我到处都看到了这些问题,虽然我还是 JavaScript 的新手,但我知道这些不是该语言的一部分。

但是,我很好奇 interface 关键字的实际用途是什么。例如,Math 是一个接口(interface),包含定义(但不包含实现)。我相信(也可能是完全错误的)这些是为语言的定义者提供一种方法来强制执行一组要在各种 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
  }
}

一个纯粹人为的例子,但以这种方式命名“模块”是不是反惯用语?

最佳答案

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

你的数学例子让我怀疑你在谈论一种设计模式,称为模块模式,广泛用于确定Javascript代码的范围。有很多方法可以使您的代码模块化。例如,就像 OddDev 回答你一样,著名的 Prototype Pattern 可以以模块化的方式嵌入你的代码(就像你的 Math 例子)。下面是 Revealing Prototype Pattern 示例,其中还包含 private 变量和函数以提供额外的灵 active :

/* 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;     
})();

但这还不是全部。其他选项包括Scoped module patternPOJO module pattern等等。看看How to Write Highly Scalable and Maintainable JavaScript: Modules ,它有一组非常简单而详尽的示例。

到目前为止,我们讨论的是纯 Javascript。如果您有能力在代码中使用库,那么RequirejsCommonsJS 等惊人的库集可以帮助您使用 开箱即用的功能。查看 Addy Osmani 关于 Writing Modular JavaScript With AMD, CommonJS & ES Harmony 的帖子.

关于javascript - 正确使用 JavaScript 接口(interface)关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600453/

相关文章:

javascript - 使用 firebase 调用数据库中的所有对象

javascript - 如何通过id从Collection中获取模型?

javascript - Android - 隐藏文本光标输入 React Native

javascript - Bootstrap btn-group-toggle 根据值更改另一个组

javascript - 如何更改 mustache.js 的默认分隔符?

javascript - 在插入 MySQL 之前尝试转义数据时出现 Node.js 错误

javascript onclick ="location.replace(' url')"不工作

javascript - 提交表单后重置 jQuery 输入字段字符倒计时

javascript - 从数组中删除所有多次出现的元素

javascript - 通过另一个对象上的字符串值为 javascript 对象属性分配一个值