2009-08-10 29 views
11

.jsファイル内の機能を、類似の名前のためにページ上の他の.jsファイルとの潜在的な競合から分離するための好ましい方法はありますか?例えばベストプラクティスは、別々の.jsファイルでjavascript関数の名前の競合を回避しますか?

あなたがのCore.jsで

function AddTag(){} 

機能を持っており、それらが競合するOrders.jsで

function AddTag(){} 

がある場合。あなたの.jsファイルをどのようにして整理し、それらを隔離するためにどのような命名規則を使用しますか?

おかげ

答えて

20

は、私は、そのファイルへの機能の範囲を制限します。

(function() { 
    var AddTag = function AddTag() { 
    }; 
}()); 

...、時にはグローバルスコープにその中の一部の機能が利用できます

var thisNamespace = function() { 
    var AddTag = function AddTag() { 
     … 
    }; 
    var foo = function foo() { 
     AddTag(); 
     … 
    }; 
    var bar = function bar() { 
     … 
    }; 
    return { 
     foo: foo, 
     bar: bar 
    } 
}(); 
+0

最初の例でどのように関数を呼び出しますか?外の関数で呼び出しを行う必要がありますか?また、jQuery $(document).ready(function(){})を使用している場合は、その関数内からAddTag()などの関数を呼び出すことはできますか?外側の関数は$(document).ready()内にありますか、別々であるか、またはその中に入っていますか? – ChrisP

+0

AddTag();.はい。はい - 呼び出しがスコープを制限する関数内にある限りです。これは私が書いた匿名関数の中の関数です(AddTagのように)。 – Quentin

+0

ありがとうございます。私は jQueryの$(ドキュメント).ready ... 内部(関数(){ を}())に移動するとき、 私は私的な機能を呼び出すことができます。 ありがとう – ChrisP

6

「名前空間」を使用できます。この

File1.js: 

var Orders = {} 
(function(o) { 
    o.function1 = function() {} 
    o.function2 = function() {} 
})(Orders); 

File2.js 

var Sales = {} 
(function(o) { 
    o.function1 = function() {} 
    o.function2 = function() {} 
})(Sales); 

ようにあなたは、このようにそれらを呼び出すことができます。一般的には

Sales.function1(); 
Orders.function1(); 

は、グローバル関数/変数を使用しないでください。ここでのjavascriptモジュールのパターンについて読むhttp://yuiblog.com/blog/2007/06/12/module-pattern/

+0

上記の関数呼び出しは技術的には必要ありません。 Javascriptが関数のスコープを持っているので、あなたがローカル変数を持っていれば、グローバル名前空間を汚染したくない場合は便利です。 –

+0

はい、ただし、長い名前空間(Yahooが使用する名前空間など)がある場合は便利です。新しい関数を定義するたびに 'This.Is.A.Long.Namespace'と入力する必要がなくなります。あなたはちょうど 'o.newFunction = function(){}' –

関連する問題