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)
你能解释一下我的错误吗?
将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)
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |