2009-06-01 8 views
0

Javascript vars/etcの基本的な永続性があります。あなたは関数/メソッドを呼び出し、次回同じ関数/メソッドを呼び出すと、前回のデータを保持しています。正しく動作させるには_around_ Javascriptの永続性?

終了時に変数を削除できますが、そのインスタンスに対してコードを再度使用する利点はありません。

とは何ですか?同じページ内のさまざまな要素に再利用できるコードを書く方法です。

したがって、私はいくつかの異なる要素を指すようにコードを書く能力が必要です。そして、各要素ごとに分離されたコードと対話します。

は、だから私はどうなる(例として)PHPで:その場合の

$element1 = new MyClass(); 
$element2 = new MyClass(); 
$element3 = new MyClass(); 

それは3つの隔離スコープで実行されている同じコードです。どのように私はJSでこれを適切に行うことができますか? jQueryのextend()を使用しても問題が発生します。

ありがとうございました。

答えて

3

JavaScriptでインスタンスを作成するには、コンストラクタ関数を記述してnewを使用して呼び出す必要があります。例えば:

function MyClass(somevalue) { 
    this.somevalue = somevalue; 
    this.somefunction = function() { 
    alert(somevalue); 
    } 
} 

var instance1 = new MyClass(1); 
var instance2 = new MyClass(2); 
var instance3 = new MyClass(3); 
+0

これは実際にはコンストラクタを使用していることを少し読んだことがありますが、何も見つけられませんでした。(これは実際には外部関数とリターンを必要としています) JSのコンストラクタを構成するものについて前向きに説明します。 PHPでは、__construct()関数を使用するだけですが、ほとんどの場合、JSでクラスをインスタンス化しようとすると、コンストラクタが存在しないと主張してエラーがスローされます。だから、コンストラクタをコンストラクタ(JS内)にするにはどうすればよいでしょうか?ありがとう。 – Spot

+0

JavaScriptのコンストラクタ関数は、他の言語に見られるようにクラス定義とコンストラクタ関数に似ていますが、他の言語には表示されます。 –

+0

これは私にもう少し詳しい情報を与えます。私はもっ​​とgoogleをします。ありがとう! – Spot

7

ローカル変数を定義するときにはvarキーワードを使用します(そうでない場合は、グローバルにデフォルト設定されます)。

function foo() { 
    var i; 
    // code code code code 
} 
+0

は、私はまだこれで多くの問題を経験しています。ただし、_var_を使用するだけでブロック構造に名前空間が影響するわけではなく、永続性の範囲にも影響します。 – Spot

+4

「永続性」はありません。「var」を使用しない場合は、単純に変数をグローバルとして宣言しているので、関数が復帰してもそれらは設定解除されません。 (少なくとも私はそうだと思います。) – grawity

+0

同じvarの差分インスタンスを同時に(同じページ)使用するにはどうすればいいですか?それは私が探しているものです。私はそれが実行可能であることを知っている、私はそれを達成するための最良の方法が何であるか分かりません。 – Spot

1

JavaScriptのネームスペースを使用すると、後でよく似たようにすることができます。以下の例を参照してください。あなたの問題は、ローカル変数を使用する場所でグローバル変数を使用することに関連しています。つまり、var myvariableを宣言します。あなたの機能の外で、それを使用してあなたの機能の中でそれを忘れたいだけです。その場合は、関数内で変数を宣言してローカルにします。

var MyNameSpace = function() { 
    return { 
     sayhello : function() { 
      alert("hello"); 
     }, 
     saygoodbye : function() { 
      alert("see ya"); 
     } 
    }; 
}(); 
+0

これは実際には関数の連想配列です。外側の関数(){}とその戻り値は不要です。 – grawity

+0

私はそれを使用して忘れたくはありません。私はそれを使うことができるようにしたい、特にそれを他のインスタンスのために参照すると同時にそれを参照することができるようにしたい。私は適切な_instancing_を探しています。それが意味をなさないならば。 – Spot

+0

実際には、 "名前空間"内に "var"を宣言することができます。これは、その名前空間のインスタンス内に存在することを意味しますが、その外部の他の変数に干渉しません。単に "var private_var;"と宣言してください。 – Fenton

0

あなたが探していることは、クラスのインスタンスがあり、各インスタンスに関連付けられたプライベートデータを持つ能力があるようですね。

あなたは以下の技術を使用してこれを行うことができます。

function Foo() 
{ 
    // Member variable only visible inside Foo() 

    var myPrivateVar;  

    // Function only visible inside Foo() 

    var myPrivateFunction = function() 
          { 
           alert("I'm private!"); 
          } 

    // Member variable visible to all 

    this.myPublicVar = "Hi, I'm public!"; 

    // Function visible to all 

    this.myPublicFunction = function() 
          { 
           myPrivateVar = "I can set this here!"; 
          } 
} 

あなたが作成し、次の構文を使用して、これらのいずれかを使用することができます。

var myFoo = new Foo(); 

myFoo.myPublicVar = "I can set this!"; 
myFoo.myPublicFunction(); 
関連する問題