【发布时间】:2011-09-15 00:26:58
【问题描述】:
我可以导出函数:
exports.foo = function() { return "bar"; };
而且我可以修改原型:
Object.prototype.foo = function() { return "bar"; };
但后者仅适用于 Node 解释器。当我修改 Node 包内的原型,然后 require 包时,Node 会忽略原型修改。它抱怨Object.foo 不存在。
【问题讨论】:
-
我认为您需要添加更多代码。您是否返回
exports = Object.prototype.foo等? -
细节并不重要。我想为所有对象添加一个 foo 函数,并让包在我调用
require("foo")时执行此操作。 -
等一下,你想修改全局对象吗?听起来……很危险。至于如何做到这一点,你不能用require来做到这一点。
-
它被称为monkeypatching,Smalltalk、Ruby 和Lisp 允许这样做。这并不危险。我只想在 Object 中添加一个
foo方法。奇怪的是 Node.js 允许进行猴子补丁(试试吧),但是当从包中导入完全相同的代码时似乎忘记了修改。 -
我知道monkeypatching 是什么,但我不确定对基本对象原型执行一次合适的频率。但我对这个概念非常熟悉。至于为什么从包中导入时不能这样做,那是因为您将其分配给了变量。让我建立一个答案。
标签: node.js prototype export package