1

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

但它设计得很糟糕。

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

我想做的是

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

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


所以我可以使用它的方法

PG.methodName()

并通过

PG.variableName


我怎样才能用 JavaScript 做到这一点?

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


这是有问题的 JS 库:请参阅 Gist

4

2 回答 2

1

You can create a dummy javascript object and add functions and variables to it like this:

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

This approach will create their dublicates within PG scope while leaving original functions in window scope. In order to move them from global scope you will have to modify api scripts themselves, which may be not a good idea.

于 2013-03-21T12:02:59.587 回答
1

您正在寻找关闭

使用“立即调用函数表达式”(也称为“自执行匿名函数”)来包装和执行您的代码;

(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:)

于 2013-03-21T12:13:27.743 回答