【问题标题】:Where to change objects prototypes in node.js?node.js 在哪里更改对象原型?
【发布时间】:2013-01-15 21:32:42
【问题描述】:

我想在 node.js 应用程序中添加或覆盖一些对象、函数和数组的标准方法(例如,像 this answer 中建议的那样)。我应该如何在一个模块中完成所有“补丁”,以便它影响我的所有其他模块?

如果我在一个只是 require'd 的模块中执行它就足够了吗,或者它不会工作,因为这两个模块具有不同的全局命名空间,所以它们有不同的对象?...或者我应该运行一些require 之后的初始化函数使所有这些“补丁”也在这个模块中工作?

【问题讨论】:

    标签: javascript node.js module prototype


    【解决方案1】:
    //require the util.js file 
    require('./util.js');
    
    var a = [];
    a.doSomething();
    

    在您的“util.js”文件中:

    //in your util.js file you don't have to write a module, just write your code...
    Array.prototype.doSomething = function(){console.log("doSomething")};
    

    【讨论】:

      【解决方案2】:

      加载的每个文件都共享相同的原始对象,如 Object、Array 等,除非在不同的 vm 上下文中运行,因此在初始化时要求文件一次将在任何地方进行更改。

      【讨论】:

      • 你的意思是仅仅在我的主模块中需要这个模块一次“补丁”就足够了,而且我不需要在我想要有 Object&co 的每个模块中都需要它“补丁” “?
      • 是的,只需要一次就足够了。 node 中的所有模块共享相同的全局范围。它们具有不同的 module 范围,但具有相同的全局范围。所以他们有相同的ObjectFunctionArray等。
      • 它适用于 Function.prototype 和 Array.prototype,但是当我尝试使用 Object.prototype 执行此操作时,它会抛出 TypeError: TypeError: Property description must be an object: undefined at Function.defineProperty (native ) 在 Object. (/opt/nginx/html/dev.stockscompare/node_modules/express/lib/express.js:53:10)
      猜你喜欢
      • 1970-01-01
      • 2015-08-20
      • 2011-05-10
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多