[英]nodejs: short alias for process.stdout.write
我正在学习 nodejs(我喜欢它!)。 我试图弄清楚如何为console.log
设置更短的别名,我发现我可以使用var cout=console.log
并从那时起使用cout('[string]')
。 然后当我想使用process.stdout.write
并且我也尝试为它创建一个简短的别名时,使用var out=process.stdout.write
。 但是当我使用out('[string]')
,出现以下错误:
_stream_writable.js:220 var state = this._writableState; ^ 类型错误:无法读取未定义的属性“_writableState”
在 Writable.write (_stream_writable.js:220:19) 在 Socket.write (net.js:670:40) 在 Object。 (/home/shayan/Desktop/nodejs/server.js:12:1)
在 Module._compile (module.js:571:32)
在 Object.Module._extensions..js (module.js:580:10) 在 Module.load (module.js:488:32) 在 tryModuleLoad (module.js:447:12) 在 Function.Module._load (module .js:439:3) 在 Module.runMain (module.js:605:10) 运行 (bootstrap_node.js:423:7)
这里有什么问题? 如何为process.stdout.write
正确创建短别名? 谢谢
你不应该做这种“短别名”。 它非常混乱,阅读您的代码的人不会理解您为什么使用随机函数名称而不是console.log
。 但是,如果您真的想创建函数别名,请考虑使用function
:
function out(text) {
// ^ ^- argument accepted by the function
// |------ the function name
process.stdout.write(text)
// ^- pass the argument you accepted in your new function to the long function
}
我添加了一些解释,以防您不知道函数的工作原理,您可以安全地删除它。
编辑:它不工作的原因是在 Node.JS 的源代码中。 您返回的堆栈跟踪指向此行:
Writable.prototype.write = function(chunk, encoding, cb) {
var state = this._writableState;
// ...
}
它尝试从this
引用一个名为_writableState
的变量。 由于写在这里:
在函数内部,
this
的值取决于函数的调用方式。
这意味着,当您调用process.stdout
时, this
指的是process.stdout.write
,但是当您从别名调用它时,它是未定义的。 因此,您将获得Cannot read property '_writableState' of undefined
异常的Cannot read property '_writableState' of undefined
(因为undefined
不包含该变量,这对于执行write
函数很重要)。
除了函数声明,您还可以使用Function.prototype.bind
:
const out = process.stdout.write.bind(process.stdout);
out('foo');
bind
返回一个新函数,上下文 ( this
) 绑定到您传递的任何值。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.