0

基本

  • toplevelOBJオブジェクトは、アプリケーション全体で として使用されます。this.toplevelOBJたとえば、 などのプロパティにアクセスできますthis.toplevelOBJ.mapArea.coordX
  • には、外部ソースからの信号を待機ClassBする関数が呼び出されます。blink
  • このClassC信号をキャプチャする必要があるため、関数を設定して、captureによってClassC送信された信号を取得します。ClassB

問題

capture()関数を介して に送信されるとClassC"this"inはではthis.toplevelOBJなく を参照します。toplevelOBJClassC

このため、関数を介してthis.toplevelOBJパラメーターとして送信しましたが、受信時に、からの関数が呼び出されているかどうかはわかりませんが、そのプロパティにアクセスできます:toplevelcapture()toplevelOBJtoplevel.update()toplevel.mapArea.coordX

質問

Objectをパラメーターとして送信する場合、Objectまったく同じですか? を調べたObjectところ、 のupdate()下に関数が見つかりましたtoplevel.__proto__.__proto__が、そのプロパティはすぐに見つかりました。toplevel.mapArea


コード

// Class in which I am sending the object
var ClassB = exports.ClassB = ClassA.extend({
    blink: function(key, value) {
       ClassC.prototype.capture(key, value, this.toplevelOBJ);
    }
});

// Class in which I am receiving the object
var ClassC = exports.ClassC = ClassA.extend({
    capture: function(key, value, toplevel) {
        /* Run Function of toplevel */
    }
});
4

2 に答える 2

0

はい、オブジェクトをパラメーターとして渡す場合は、まったく同じです。

オブジェクトの正確なコピーではなく、実際には同じオブジェクトです。パラメータはオブジェクトへの単なる参照であるため、オブジェクトがコピーされることはありません。


プロパティとメソッドは、オブジェクト自体のメンバーまたはプロトタイプ チェーンのメンバーのいずれかになります。あなたの場合、mapAreaプロパティはオブジェクト自体のメンバーであり、updateメソッドはプロトタイプのメンバーまたはオブジェクトのプロトタイプであるtoplevelOBJオブジェクトです。

于 2013-02-13T16:13:51.893 に答える
0

これをクラスで処理する最も一般的な方法はthis、インスタンス化時に適切な値を格納することです。これを行う最も一般的な方法は次のとおりです。

function SomeClass
{
 var that = this;
 that.myVariable = 5;

 that.someFunction = function()
 {
    return that.myVariable;
 }
}

bindまた、アンダースコア ライブラリの関数で説明されているように、this変数を「強制」できるラッパー/プロキシ メソッドもあります。http://underscorejs.org/#bindを参照してください

私は、呼び出し元が変数を強制するよりも、これら 2 つの方法を好みます。this

于 2013-02-13T16:04:03.957 に答える