2011-08-01 15 views
0

変数の古い値を上書きしなくても、同じ変数/関数を持つ複数のスクリプトをJS内に読み込むことは可能ですか?たとえば、ロードされたスクリプトごとに独自のスコープ/サンドボックスまたはオブジェクトを作成します。同じ変数/関数を持つ複数のスクリプトを読み込む

ファイル負荷へ:

SCRIPT1:

<script> 
function init() { 
    do something... 
} 
</script> 

スクリプト2:

<script> 
function init() { 
    do something... 
} 
</script> 

とコールscript1.initを(ロードした後)、またはscript2.init()、これは可能ですか?

答えて

3

自己匿名関数を呼び出すことで、コードの各セクションをラップすることができます。これにより、効果的にそのセクションの名前が付けられます。あなたは、コードを変更することができない場合

(function() { 
    function init() { 
     // do something... 
    } 
})(); 

init(); // ReferenceError 

しかし、第二initは、最初の定義が上書きされます。

しかし...

と読み込みコールscript1.init()またはscript2.init(後)、これは可能ですか?

...混乱しています。あなたはすでにオブジェクトのメソッドとしてinit()を持っていますか?その場合、が互いに上書きされません。

+0

任意のソースサーバーからコードをロードし、コードが上書きされないようにするオブジェクトを作成したいが、ロードするコードは変更できない。 –

1

残念ながら、 1つのページに1つのグローバルスコープがあります。例えば

ただし、モジュールのパターンのようなものを使用することにより、あなたは偽の名前空間にすることができ

var script1 = (function() { 
    var that = {}; 
    that.init = function() { 
     do something... 
    }; 

    more functions... 

    return that; 
})(); 

をそして)(script1.initを使用してそれを呼び出します。

モジュールパターンhereについて詳しく知ることができます。

+0

問題は、サイトを作成して、ユーザーが自分のプラグインをサイトに追加できたことです。プラグインのコードはどのソースからもロードされていますが、コードをiframe。ソリューションの問題点は、ユーザーがコードを特定のデザインパターンで記述しなければならないことです。しかし、コードを自分のやり方で書くことができるようにしたいと考えています。 –

+0

その場合、jsfiddleなどのサイトでどのようにサンドボックスを実装しているかを調べることができます。 –

関連する問題