我可以导出函数:
exports.foo = function() { return "bar"; };
我可以修改原型(prototype):
Object.prototype.foo = function() { return "bar"; };
但后者仅适用于 Node 解释器。当我修改 Node 包内的原型(prototype)然后 require
该包时,Node 会忽略原型(prototype)修改。它提示 Object.foo
不存在。
最佳答案
由于您想要做的是 Monkeypatch Object
让我们考虑一下正在做什么。我将使用 Node 项目的 Joyent github 页面中的一个示例,因为这是相当规范的,并且提供了一个可靠的比较示例,我们都同意“工作正常”(因为如果它没有......那么)
var util = require('util');
var net = require('net');
var stream = require('stream');
var EventEmitter = require('events').EventEmitter;
var FreeList = require('freelist').FreeList;
var HTTPParser = process.binding('http_parser').HTTPParser;
var assert = require('assert').ok;
var parsers = new FreeList('parsers', 1000, function() {
var parser = new HTTPParser('request');
parser.onMessageBegin = function() {
parser.incoming = new IncomingMessage(parser.socket);
parser.field = null;
parser.value = null;
};
我们在这个例子中看到的是一堆必需的模块,它们被分配给变量。这些永远不会重新回到Object
原型(prototype)上。我能看到做到这一点的唯一方法是在调用主体中包含代码,该代码要求循环遍历这些代码并将它们应用到其中的对象。
换句话说,我能看到做你想做的事情的唯一方法就是在你的应用程序的根目录中做你想做的事情。或者对您可能想要合并的两个对象进行某种组合(如果这是目标)。
否则,您会将原型(prototype)增强限制为专门返回的 var,而不是根对象。
关于node.js - 如何在 Node.js 包中导出修改后的原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410503/