1

我如何在“订阅”中调用一个函数而不是内联编写它?

例如,如果我有:

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

在您的函数中,“this”现在具有不同的上下文。如果您的 outputLog 函数是 car 的属性,您已经在对象中声明了 self,您可以改为使用 self.name。

于 2013-11-06T16:30:06.250 回答