私の目標は、関数のテーブルから関数を呼び出して(つまり間接的に)コマンド処理を一般化することです。残念なことに、this
は、undefined
と呼ばれます。js - 'this'はメソッド 'indirectly'を呼び出すときには定義されていません
function Server() {
this.sessions = {};
server = this;
this.handlers = {
"dummy" : server.dummyCommandHandler,
};
}
Server.prototype.dummyCommandHandler = function() {
print (this.sessions);
}
Server.prototype.run = function (command) {
print (this.sessions); // [Object object]
this.handlers[command.name](); // prints 'undefined'
this.dummyCommandHandler(); // prints '[Object object]'
}
s = new Server();
s.run({ "name": "dummy" });
これではJavaScriptを使用して、私の初めてです、と私は私がダウンしてスコープを持っていたが、どうやらそれはそうよりも複雑であると思いました。 Aliasing Serverのthis
とserver
という変数を使用しても問題が解決しませんでした(おそらくthis
がhandlers
オブジェクト内で手を変えたと思いました)。関数が間接的に呼び出されたときのthis
の有効範囲は何ですか?
私は〜 'サーバー= this'悪い、' VARサーバ= this'良い – Phil
'this.handlers [command.name] .bind(これを参照することができます最初の問題)(); ' – hlfrmn
あなたのテスト環境は何ですか?私はこれを私のブラウザのコンソールにコピーして貼り付けました。予想どおりに動作していたようですね。 –