node.js - 如何在 Node.js 包中导出修改后的原型(prototype)?

标签 node.js prototype export package

我可以导出函数:

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 页面中的一个示例,因为这是相当规范的,并且提供了一个可靠的比较示例,我们都同意“工作正常”(因为如果它没有......那么)

https://github.com/joyent/node/blob/master/lib/http2.js#L22

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/

相关文章:

json - 在文档中查找数组中的元素

c# - 使用格式化选项将多个 radgrids 上传到单个 excel 表

export - Frege 中的显式模块导出

javascript - 在 JS 中将参数作为单独的参数传递

javascript - 无法在 Firefox 中读取 Element.prototype

mysql - 使用 MySQL Workbench CE 导出数据库的数据字典?

javascript - Webpack 4 和 Uglify 插件(TypeError : Cannot read property 'length' of undefined)

node.js - Docker-compose 启动容器两次,运行命令两次并且内容相同

node.js - Firebase 函数抛出无法捕获的错误

javascript - 如何在Javascript对象中实现多个新功能?