如何使用`requires`重置类原型

时间:2016-02-27 08:27:08

标签: javascript node.js

为了举个例子,这里有一些人为的设计:

var util = require('util');
var Me = require('./me.js');

console.log(util.inspect(Me.prototype.something.toString())); // #1      

Me.prototype.name = function() {
  console.log('different');
};

console.log(util.inspect(Me.prototype.something.toString())); // #2

// re-init prototype
var Me = require('./me.js');
console.log(util.inspect(Me.prototype.something.toString())); // #3

输出:

'function () {\n    console.log(\'original\');\n}'
'function () {\n    console.log(\'different\');\n}'
'function () {\n    console.log(\'different\');\n}'

为什么require调用重新启动 Me 类原型?

2 个答案:

答案 0 :(得分:1)

require缓存代码,因此当重复调用它时,它不会再次重新加载它。由于Me对象仍在内存中,因此当您再次require时,它不会重新加载。

如果要执行此操作,则必须从模块缓存中删除Me

请参阅此回答How to remove module after "require" in node.js?

答案 1 :(得分:1)

来自Nodejs文档,LINK

  

模块在第一次加载后进行缓存。这意味着   (除此之外)每个要求的呼叫(' foo')都会得到   返回完全相同的对象,如果它将解析为相同   文件。

     

多次调用require(' foo')可能不会导致模块代码   多次执行。这是一个重要的特征。用它,   "部分完成"可以返回对象,从而允许传递   即使它们会导致循环,也要加载依赖项。

     

如果您想让模块多次执行代码,那么导出   一个函数,并调用该函数。