Javascript NodeJS中内置模块的原型设计

Javascript NodeJS中内置模块的原型设计,javascript,node.js,prototype-programming,Javascript,Node.js,Prototype Programming,我一直在尝试向Node的文件系统模块添加一些方便的函数(主要是因为它缺少一些常识),但每次我在repl中开始fs.prototype.myfunc=,Node都会抱怨我试图设置未定义变量的属性。您真的不能从外部访问节点的内置模块原型吗?如果是这样,是否有人知道扩展节点内置模块的可行解决方案 请注意:在尝试原型化之前,我确实需要fs var fs = require('fs'); fs.prototype.myfunc = function() {}; //TypeError thrown her

我一直在尝试向Node的文件系统模块添加一些方便的函数(主要是因为它缺少一些常识),但每次我在repl中开始
fs.prototype.myfunc=
,Node都会抱怨我试图设置未定义变量的属性。您真的不能从外部访问节点的内置模块原型吗?如果是这样,是否有人知道扩展节点内置模块的可行解决方案

请注意:在尝试原型化之前,我确实需要fs

var fs = require('fs');
fs.prototype.myfunc = function() {}; //TypeError thrown here

下面是一个如何执行此操作的示例:


可能存在一种解决方法,但node不允许您对其模块进行修补,这是在向您发送一条消息。执行
require('fs-monkeypatch')
以在
require('fs')
中获取额外的函数是令人困惑的。只需在fs模块之外添加您的函数。

您在响应需求(“”)时得到的结果取决于特定模块。有些模块会执行以下操作:

module.exports = function() {}
在这种情况下,返回的值将是函数,因此将有一个可以附加东西的原型

其他模块只是在已经存在的exports.module对象上设置值。例如:

module.exports.someFunc = function(){}
其中module.exports基本上只是:

module.exports = {}
对于fs模块,他们执行后者:

var fs = exports;

....

fs.readFileSync = function(path, encoding) {
由于返回的对象不是函数,因此会出现错误。如果您这样做,您将得到相同的错误:

var x = {};

x.prototype.myfunc = function(){}
注意,您只需执行以下操作:

var fs = require('fs');

fs.myFunc = function(){} 

我明白了。有点令人失望的是,你不能仅仅扩展模块(阅读:不能用邪恶的函数替换当前的函数),但我相信这是有原因的。我可能会同意你的建议,将函数添加到我需要它们的文件中。谢谢你的意见!当然快速测试表明您完全正确(而且我对JS的了解显然没有我想象的那么多)。感谢您指出并解释这一点!