gpt4 book ai didi

node.js:无法读取未定义的属性 'defaultEncoding'

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:26 27 4
gpt4 key购买 nike

我想写一个可变的 write() 函数。

var write = function(s) {
process.stdout.write(s);
}
write("Hello world!");

我以为你可以把它写得更短:

var write = process.stdout.write;
write("Hello world!");

但是在这里我会收到这个错误:

TypeError: Cannot read property 'defaultEncoding' of undefined
at Writable.write (_stream_writable.js:172:21)
at Socket.write (net.js:613:40)
at repl:1:2
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)

这是为什么?

最佳答案

这都与 javascript 如何处理 this 有关。在函数 process.stdout.write 内部 there is a call defaultEncoding() 使用 this 变量。

在 javascript 中,this 不会被赋值,直到对象调用定义 this 的函数并且它与调用对象相关。

因此在您的第一个示例中,this 指向 process.stdout 对象并且它具有方法 defaultEncoding。在您的第二个示例中,thisundefined 因为该函数是从全局命名空间调用的。当 process.stdout.write 尝试调用 defaultEncoding 时,它会抛出您提到的错误。

您可以使用 Function.prototype.call() 为函数手动定义 this 值方法。示例:

var write = process.stdout.write;
write.call(process.stdout, "Hello world!");

call 的第一个参数是在函数内部用作this 的对象。

我推荐阅读 this article ,它在 javascript 中解释了很多关于 this 的内容。

关于node.js:无法读取未定义的属性 'defaultEncoding',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28874665/

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