Javascript对象/功能问题

use*_*021 1 javascript functional-programming

我有一个日志类"logger"的实例,这个类有一个函数"log(txt)",它的工作原理.

现在我声明了一个不同的类"Runner",我将它传递给构造函数中的logger实例.一切正常,直到第5行,但第7行不写入日志:

var Runner = function (logger) {
  // constructor:
  logger.log("this way it works");
  this.logger = logger; //line 4
  this.logger.log("this also works"); //line 5
  this.logf = this.logger.log; //create a shorthand for logging
  this.logf("this is not written to log. why? i thought i can create a var for a function"); //line 7
};

var logger = new Logger(); //class not shown here
var runner = new Runner(logger);
var otherinstancce = new OtherClass(logger) //line 12
Run Code Online (Sandbox Code Playgroud)

你能解释一下我的错误吗?

sth*_*sth 7

log函数分配给logf当前对象的成员时,它将成为此当前对象的成员函数.当你调用is时,this函数内部的对象将引用它的新对象,而this.logger不再是它.因此,该函数将找不到要在logger对象上调用的其他函数的变量.

为避免这种情况,您可以编写一个转发到logger对象的简单函数:

this.log = function() { return this.logger.log(arguments); }
Run Code Online (Sandbox Code Playgroud)

或者,使用闭包:

var obj = this.logger;
this.log = function() { return obj.log(arguments); }
Run Code Online (Sandbox Code Playgroud)