1

私は非常に大きなjavascriptファイルを持っています:それは9,000行を超えています。コードは次のようになります。

var GlobalVar1 = "";
var GlobalVar2 = null;

function A() {...}

function B(SomeParameter) {...}

私はグーグルコンパイラを使用していて、グローバル変数と関数の名前がa、b、c ...に変更されました。後で、外部コードとの衝突が発生する可能性があるという良い変更があります。

私がやりたいのは、$ですべてにアクセスできるjqueryライブラリのようにコードを整理することです。たとえば、すべてが#文字の後ろにくるようにコードに名前空間を付ける方法はありますか?

私のコードを呼び出すためにこれが欲しいです:

#.GlobalVar
#.functionA(SomeParameter)

これどうやってするの?

4

5 に答える 5

3

補足:#文字は有効な変数名ではありません (この質問を参照してください)。一般的な「短縮形」はアンダースコア_とドル$です。ドルの使用は機械生成コード用であると読んだことを覚えていますが、jQuery でわかるように、これはほとんど無視されています。

最もよく知られている手法は次のようになります。

(function($) {
  $.a = function() { ... }
  $.b = 1000;
})(myNamespace);

myNamespace.a( ... );

いずれにせよ、コードに変数へ割り当てが必要になると思います。

または、クラスのようなものを指定することもできます:

function MyClass() {
  var f = 0;

  function a() { return f; }
  function b(value) { f = value; }
  function c() { f *= f; }

  this.get = a;
  this.set = b;
  this.square = c;
}

var myInstance = new MyClass();
于 2012-04-11T23:36:19.890 に答える
3

ローカル変数を保護するには、すべてのライブラリをクロージャでラップする必要があります。グローバルにアクセスできるようにするメンバーは、グローバル コンテキスト オブジェクトに割り当てる必要があります (ブラウザーではwindow)。

(function(){
  var GlobalVar1 = "";
  var GlobalVar2 = null;

  function A() {...}

  function B(SomeParameter) {...}

  //  some function accessible globally with `window.C()` or just `C()`:
  window.C = function() {}
})();
于 2012-04-11T23:39:01.760 に答える
2
var $$ = {
    A: function() {
        alert('namespace rules!');
    },
    B: function() {
        alert('foo');
    }
}
$$.A();
$$.B();
​

ライブデモ

など...

変数名の不正なトークンのために、から#に変更したことに注意してください。$$#

于 2012-04-11T23:27:42.447 に答える
1

もう 1 つの方法 (既に Closure Compiler を使用している場合) は、その機能を使用して名前空間を処理することです。

例:

mylib.js :

goog.provide('mynamespace.whatever');

var globalVar1='foo';

mynamespace.whatever.functionA=function(txt){
    alert('A: '+txt+' '+globalVar1);
};

mynamespace.whatever.functionB=function(){
    alert('B: '+txt+' '+globalVar1);
};

main.js :

goog.require('mynamespace.whatever');

mynamespace.whatever.functionA('hello world');


また、コンパイルされたコードの外部で難読化されていない関数/変数を使用する場合は、次を使用できます。

goog.exportProperty(object, publicName, symbol)

goog.exportSymbol(publicPath, object, opt_objectToExportTo)

見てください:http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.html

于 2012-04-12T00:03:58.503 に答える
1
var # = {
    GlobalVar1: "",
    GlobalVar2: null,

    A: function() {

    },

    B: function(SomeParameter) {

    }
}
于 2012-04-11T23:30:47.083 に答える