我可以在Node.js中以原型方式使用require()吗?
Can I use require() in Node.js in a prototypical way?
我一直对JavaScript的原型编程很感兴趣,我正试图找出一种有效的方法来使用Node模块。
例如,我想使用一个原型来快速创建一个debug
对象在我的每个模块,它有一个name
属性和一个log
方法,通过构造:
custom_modules/debug.js
var settings = require('custom_modules/settings');
exports = function debug(name){
this.name = name;
this.log = function(message){
if (settings.debug == 'true'){
console.log("[Debug][" + name + "]: " + message);
}
}
}
所以我想知道我是否可以使用该模块作为构造函数,像这样:
do_something.js
var debug = new require('custom_modules/debug')("Something Doer");
debug.log("Initialized"); // -> [Debug][Something Doer] : Initialized
它会工作吗?如果不是,正确的等效值是什么?
new
不关心函数从哪里来。所以,是的,函数可以是require
模块的结果。
但是,模块必须直接导出函数。在你当前的代码中,你只是给局部 exports
变量赋了一个新值,我们都知道,给一个局部变量赋值在它的作用域之外没有任何影响。
模块仍然会导出一个空对象。你必须重写module
的exports
属性:
module.exports = function() {...};
如前所述,会出现优先级问题,因此您必须执行
var debug = new (require('custom_modules/debug'))("Something Doer");
相关文章:
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 如何使文本、数字和日期html输入字段以一致的方式支持Ctrl+Z(撤消)
- 修改 HTML 的方式使左键应带到下一个 URL
- require.js是require的另一种方式
- 如何设计API,使其符合REST约定和Ember.js方式
- 如何在不重新启动 Web 应用程序的情况下以编程方式使 JavaScript 和 CSS 包失效或刷新
- 为什么我不能在require.js中两次使2个路径指向同一个文件
- ImageMapster插件:如何以编程方式使区域不再可选
- 使网页实时和多用户的最佳方式
- 如何使JavaScript在这种情况下以更明显的方式失败
- 如何使输入以内联方式显示
- 如何将两个段落连接在一起以内联方式显示,而不会使文本移动
- 使window.rollTo()以物理方式滚动到某个点
- 如何使这个Javascript以不同的方式出现
- 如何使JavaScript对象和数组的行为方式相同
- 频繁的轮询会使服务器过载吗?如果是的话;这是实现实时更新的最佳方式
- 干净的方式使后续AJAX调用基于数据的API
- 如何以编程方式使浏览器缓存无效
- 纯CSS方式使按钮有两个点击状态
- 以编程方式使用时,Babelify sourceType错误