gpt4 book ai didi

Javascript 对象/函数问题

转载 作者:行者123 更新时间:2023-11-30 07:03:27 25 4
gpt4 key购买 nike

我有一个日志记录类“logger”的实例,这个类有一个函数“log(txt)”,它可以工作。

现在我声明了一个不同的类“Runner”,并在构造函数中将记录器实例传递给它。一切正常,直到第 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

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

最佳答案

当您将 log 函数分配给当前对象的 logf 成员时,它就成为该当前对象的成员函数。当您调用 is 时,函数内部的 this 对象将引用它的新对象,而不是 this.logger 了。因此,该函数将找不到它想在记录器对象上调用的其他函数的变量。

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

this.log = function() { return this.logger.log(arguments); }

或者,使用闭包:

var obj = this.logger;
this.log = function() { return obj.log(arguments); }

关于Javascript 对象/函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com