0

Javascript vars/etc の基本的な永続性があります。関数/メソッドを呼び出し、次に同じ関数/メソッドを呼び出すと、前回のデータが保持されます。

使用が終わったら vars を削除できますが、その場合、そのインスタンスに対してコードを再度使用する利点が失われます。

では、同じページ内のさまざまな要素で再利用できるコードを記述する適切な方法は何ですか。

したがって、いくつかの異なる要素を指し示すことができるようにコードを記述し、要素ごとに分離されたコードと対話する能力が必要です。

したがって、PHPでは(例として)次のようにします。

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

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

ありがとう。

4

4 に答える 4

7

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

function foo() {
    var i;
    // code code code code
}
于 2009-06-01T13:37:07.033 に答える
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);
于 2009-06-01T13:44:51.013 に答える
1

JavaScript に名前空間を付けて、自分が求めているものによく似たものにすることができます。例については、以下を参照してください。あなたの問題は、ローカル変数を使用したい場所でグローバル変数を使用することに関連しているように聞こえます-つまり、var myvariable; を宣言します。関数の外で、それを使用したいだけで、関数内で忘れてしまいます。その場合は、関数内で変数を宣言してローカルにします。

var MyNameSpace = function() {
    return {
        sayhello : function() {
            alert("hello");
        },
        saygoodbye : function() {
            alert("see ya");
        }
    };
}();
于 2009-06-01T13:38:08.687 に答える
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();  
于 2009-06-01T14:21:47.177 に答える