0

javascriptで別のクラス/クラスのインスタンスでローカル変数の値を読み取る方法を知りたいと思いました。

例えば:

クラスにメソッドがあります:

myClass1.prototype.myMethod0 = function()

{
 this._myVar = null; //initialize this._myVar
}

myClass1.prototype.myMethod1 = function(list)
{
 this._myVar = msg.list;
}

myClass1.prototype.myMethod2 = function()
{
 //do something 
// and update the list like say:

list1 = this._myVar; //access the this_myVar.

}

そして私の別のカルスでは、

myClass2.prototype.myMethod = function()
{
 //call the class1's method here..

myClass1.prototype.myMethod2();

}

myMethod2はコールバックであり、私はそれをバインドしmyClass2ます。

実際にmyMethod2は、次のように呼び出されていることを意味します。myClass1.callback();

しかし、私の問題は、私が呼び出すmyClass1.prototype.myMethod2();と、list1 = this._myVar;が更新されず、undefined. 私は同じものを修正していません。

問題は、変数、「this._myVar」が myclass1 の myMethod2 で「未定義」であることです。

4

2 に答える 2

0

ここで this_myVar は関数内のローカル変数なので、関数から出たら

その価値は失われます。

したがって、未定義の値が得られます。

値を保持するには、this_myVar をクラス内のデータメンバーとして宣言する必要があります。

于 2012-07-06T10:49:12.657 に答える
0

何が可能ですが、あなたがした方法ではありません:

  1. キーワードがないvarと、変数はローカルではなくグローバルになります。したがって、コードは実際には、同じページのすべての JavaScript コードで共有されるグローバル変数を作成しました。this_myVar

  2. list1myMethod1()呼び出されなかった場合は未定義になります。

[JavaScript OO プログラミングの概要については、こちら][1] を参照してください。

[編集]質問を更新したようで、変数は 経由でアクセスできるようになりましたthis。自動変数thisは、関数が「メソッド」として呼び出された場合にのみ割り当てられます。

myClass1.prototype.myMethod2()は元の定義を呼び出し、this未定義になります。

次のようなコードを使用する必要があります。

var inst = new myClass1();
inst.myMethod2();

の内部でmyMethod2は、変数はそのように呼び出した場合thisと同じ値になります。inst

[編集 2]インスタンス プロパティにアクセスする場合は、次のインスタンスを介して呼び出す必要があります。JavaScriptは、コードの意味を読み取ろうとしません。myMethod2()myClass1

したがって、 のメソッドを呼び出したいときはmyClass1、そのインスタンスが必要です。で作成してみてくださいmyClass2:

var myClass2 = function() {
    this.inst1 = new myClass1();
}

myClass2.prototype.myMethod = function() {
    this.inst1.myMethod2();
}

または、インスタンスをメソッドに渡す必要があります。

myClass2.prototype.myMethod = function(inst1) {
    inst1.myMethod2();
}

しかし、myMethod2()他のグローバル メソッドと同じように呼び出した場合this、有用な値はありません。「のプレフィックスを持つ関数を呼び出すときはmyClass1.prototype.、のインスタンスを探してそれをmyClass1入れます」と言う方法がありますthis。この型のインスタンスが 15 個ある場合、JavaScript は何をすべきでしょうか? ランダムに1つを選択しますか?

于 2012-07-06T10:34:43.030 に答える