3

我主要用java编程,几乎没有javascript知识。
我的问题是 javascript 是否允许使用 API。例如,我有一个 javascript 应用程序,我希望像中间件 API 集一样向它公开一些函数。这个中间件也可以在 javascript 中。我想划分应用程序和中间件功能。我将同时实现应用程序和中间件。这是一个有效的用例还是我用错了方法。

4

1 回答 1

6

API 是一个抽象概念,JavaScript 与任何编程语言一样,允许定义和使用 API。

为了定义 API,将公共函数与内部字段和函数明确分离,一种流行的模式是基于IIFE的模块模式

这是一个示例,您可以在其中看到私有数据、一个私有函数和 3 个公共函数。

var countLib = (function(){
   var count = 0;
   var add = function(a) { count += a };
   return {
        getCount : function() { return count },
        increment : function() { add(1) },
        decrement : function() { add(-1) }
   }
})();

它允许你做

countLib.increment();
var count = countLib.getCount(); // gets 1

内部count价值和add功能不暴露。

这种模式在许多流行的库中都有使用。jQuery 中使用的一个常见变体让库在上下文中分配自己:

(function(window){
   var count = 0;
   var add = function(a) { count += a };
   window.countLib = {
        getCount : function() { return count },
        increment : function() { add(1) },
        decrement : function() { add(-1) }
   }
})(window);

这具有启用缩小器以减少window名称的次要优势,它还允许库分配多个名称(例如“jQuery”和“$”)。

这个例子还展示了另一个有用的模式的前提,命名空间:让事情变得清晰的一个重要部分是定义专用的命名空间,它是使用属性构建的:

 myLib = myLib || {};
 myLib.mySubLib1 = (function(){
      ...
 })();

myLib在这里,许多文件可以具有相同的模式:如果不存在,它们都将在第一行初始化。

您通常会结合这些模式来构建具有最小冲突风险(即不定义全局变量)并且不会暴露太多内部结构的美观库,以便您可以使实现不断发展。

对于更复杂的 API,您还可以定义类。

于 2013-04-03T07:23:04.087 回答