私は次のコードを持っている:PubsubJsと*メッセージに加入したときに、この*は未定義である
someClass1 = function() {
this.doStuff = function() {
PubSub.publish('topic1', { id: 1 });
}
}
someClass2 = function() {
this.forename = 'bob2';
PubSub.subscribe("topic1", function (msg, data) {
log(msg, data, this.forename);
});
}
function log() {
console.log(arguments);
}
var c1 = new someClass1();
var c2 = new someClass2();
c1.doStuff();
と私はpubsubjsライブラリを使用していますが(https://github.com/federico-lox/pubsub.js)
コードは単純です - メッセージを公開そして私の質問は、私がメッセージを公開し、someClass2でそれを処理する際、このが定義されていないということですPubSubの
を使用して別のクラス(someClass2)でそれを処理します。これは次の行で発生します:log(msg、data、this.forename);
これはsomeClass2のプロパティ/機能にアクセスできないことを意味します。 を未定義にしないためには何が必要ですか?これは可能ですか?それらは他の図書館にも役立つでしょうか?私はそれを間違ってやっています....
すべての助けが習得しました!
someClass2 = function() {
this.forename = 'bob2';
var that = this;
PubSub.subscribe("topic1", function (msg, data) {
log(msg, data, that.forename);
});
}
これは意味が分かりませんが、わかりません。説明できますか? – Ilyas
@Ilyas実際にはgeorgが彼の答えで良く説明しました。 'subscribe'に渡した関数は' this'に束縛されません。私の答えは、スコープ内に残っている変数の内部に参照を格納するだけです。 georgの答えは関数を 'this'にバインドして、関数内で意味を持つようにします。 IMOの私の答えは単純です、georgの答えは表面上あなたの問題を解決する*正しい*方法です。 – Jamiec