NodeJS中的内置模块原型

时间:2011-06-19 10:54:01

标签: javascript node.js prototype-programming

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

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

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

3 个答案:

答案 0 :(得分:6)

您回复需求('')取决于特定模块。一些模块执行此操作:

module.exports = function() {}

在这种情况下,返回的值将是函数,因此可以附加原型的原型。

其他模块只在已存在的exports.module对象上设置值。 E.g:

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(){} 

答案 1 :(得分:1)

答案 2 :(得分:1)

可能有一种解决方法,但节点通过不让您修补其模块来向您发送消息。在require('fs-monkeypatch')中执行require('fs')以获取额外功能令人困惑。只需在fs模块之外添加您的功能。