如何使用函数包装JS库并将其放入命名空间?

时间:2013-03-21 11:54:21

标签: javascript oop namespaces global-variables encapsulation

我在 JavaScript 中有支付网关API包装

但它的设计很糟糕。

它使用 163个全局(窗口)对象

我想做的是

获取API包装器生成的所有全局对象

将它们全部放在一个名为“PG”的对象中。


所以我可以通过

使用它的方法
PG.methodName()

并通过

获取变量
PG.variableName


如何使用JavaScript完成此操作?

或者是否有其他方法可以使用命名空间加载脚本?


这是有问题的JS库:See Gist

2 个答案:

答案 0 :(得分:1)

您正在寻找closure

使用“Immediately-Invoked Function Expression”(也称为“自执行匿名函数”)来包装和执行代码;

(function( window, document, NS, undefined ){

  NS.variableName = "string value";
  NS.methodName = function() {};

  function myFunction() { alert('within closure'); };

}( window, window.document, (window.NS = window.NS || {}) ));

然后,您可以从闭包外部访问NS,但不能访问仅限于闭包范围的函数myFunction

是的,您可以将NS重命名为PG甚至PayGate:)

答案 1 :(得分:0)

您可以创建一个虚拟javascript对象,并向其添加函数和变量,如下所示:

var PG = PG || {};
PG.methodName = apiMethodName;
PG.variable = variableName;

此方法将在PG范围内创建其共享内容,同时将原始函数保留在window范围内。为了将它们从全局范围移开,您将不得不自己修改api脚本,这可能不是一个好主意。