我正在写一个非常简单的函数,一次在多个地方记录一个字符串,其中一个是console.log
,另一个使用simple file writer来记录文件。
function doLog(logFuncs, val){
for(const logFunc of logFuncs)
logFunc(val);
}
简单文件编写器的.write
方法被声明为原型方法:
SimpleFileWriter.prototype.write = function(message, encoding, callback){ }
当踏入时,控制台的.log
方法也是如此。
Console.prototype.log = function log(...args) { }
我将其中的每一个传递给doLog
:
doLog([console.log, myWriter.write], "hello world");
当逐步调试控制台的.log
方法时,this
会引用Console
。
当逐步调试SimpleFileWriter的.write
方法时,this
引用global
。
我理解为什么global
被用作SimpleFileWriter this
方法的.write
绑定,但我无法理解为什么这个对于控制台的.log
,
为什么会这样?