1

インラインで記述する代わりに、「subscribe」内で関数を呼び出すにはどうすればよいですか?

たとえば、私が持っている場合:

function Car(name) {

var self = this;
self.name = name;
self.isRed = ko.observable(isRed);

self.isRed.subscribe(function (value) {console.log(this.name()}, this)

}

すべてが期待どおりに機能し、[this.name] の値が出力されます。

しかし、関数本体を次のように置き換えたいと思います。

self.isRed.subscribe(function (value) {outputLog(value)}, this)

ただし、これを行うと、[this.name] の値が outputlog 関数内で未定義になります。

私は JavaScript とノックアウトの両方に慣れていないので、JavaScript に関する基本的な何かが欠けているのではないかと思います。[this] のスコープに関係していると思いますが、構文を正しくする方法がわかりません。

4

2 に答える 2

2

これを試してください(フィドル:http://jsfiddle.net/hv9Dx/12/):

self.isRed.subscribe(
   function (value) {
     outputLog.call(this, value);
   }
, this)

this キーワードに関する素晴らしい記事は次のとおりです。http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/

于 2013-11-06T16:15:39.040 に答える
1

あなたの関数では、「これ」は異なるコンテキストを持っています。outputLog 関数が car のプロパティである場合、オブジェクトで self を宣言したので、代わりに self.name を実行できます。

于 2013-11-06T16:30:06.250 に答える