在node.js中扩展类的不同方法
Different ways of extending classes in node.js
在node.js或javascript中扩展原型类。(js新手(
我在看expressjs的源代码时看到了这个:
var mixin = require('utils-merge');
....
mixin(app, proto);
mixin(app, EventEmitter.prototype);
Utils-merge
看起来像是一个外部模块。以上和仅仅做一些类似的事情有什么区别:
var util = require('util');
....
util.inherit(app, proto);
util.inherit(app, EventEmitter);
这是否仍在试图扩展属性?我很善良——迷失在这里:
app.request = { __proto__: req, app: app }; // what is the equivalent for this in util?
app.response = { __proto__: res, app: app };
如果是的话,即使使用了util.inherit
,它还会起作用吗?
app.request = util.inherit(app, req)
或者类似的东西?jshint说__proto__
是去复杂化的。
另外我也看到了这个?
var res = module.exports = {
__proto__: http.ServerResponse.prototype
};
这可能是吗?
var res = module.exports = util.inherits...??
我在看expressjs 的源代码
您可能还想看看这个关于app
应该如何工作的问题。
utils-merge
之间有什么区别如上所述,只是做一些类似的事情:var util = require('util'); .... util.inherit(app, proto); util.inherit(app, EventEmitter);
他们在做完全不同的事情:
utils合并
将源对象的属性合并到目标对象中util.继承
将原型方法从一个构造函数继承到另一个构造函数。构造函数的原型将被设置为从创建的新对象superConstructor
还要阅读他们的资料来源!
app
(由于一些奇怪的原因是一个函数(不是构造函数,而是一个(普通的(对象——createApplication
创建的实例。所以这里没有办法进行"类继承"。无论如何,你不能在同一个构造函数上多次使用utils.inherits
,因为它会覆盖它的.prototype
属性
相反,mixin
函数将简单地将proto
的所有属性以及EventEmitter.prototype
的所有属性复制到app
对象。
这是否仍在试图扩展属性?我很善良——迷失在这里:
app.request = { __proto__: req, app: app }; // what is the equivalent for this in util? app.response = { __proto__: res, app: app };
为此使用本机Object.create
函数:
app.request = Object.create(req);
app.request.app = app;
app.response = Object.create(res);
app.response.app = app;
如果是的话,即使使用
util.inherit
,它仍然有效吗?app.request = util.inherit(app, req) // Or something like that?
不,真的不是。
jshint说
__proto__
是去复杂化的。
是的,您应该使用Object.create
。但非标准的__proto__
可能会被保留以保持兼容性。
另外我也看到了这个?
var res = module.exports = { __proto__: http.ServerResponse.prototype };
这可能是吗?
var res = module.exports = util.inherits...??
不,这也是Object.create
:的情况
var res = module.exports = Object.create(http.ServerResponse.prototype);
您可以在Node.js.中使用ES6
class myClass() {
this.hi = function(){"hello"};
}
class myChild extends myClass() {
}
var c = new myChild(); c.hi(); //hello
- 如何在扩展jQuery方法时传递参数
- 有没有一种方法可以使用任何浏览器扩展整个dom树'的开发工具
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 用jQuery方法扩展Zepto.js?scrollTop()
- Chrome扩展:是否有一种方法可以运行JavaScript来获取页面上的内部html,并将其保存到扩展中的变量中
- 为什么这个扩展方法不起作用
- 使用多功能框在 chrome 扩展程序中包含内联自动填充功能的任何方法
- 下划线扩展方法和结构.js子类
- 如何用document.createElement(“input”)方法使输入文本字段动态扩展
- 如何使用自定义查询方法扩展水线
- 使用按值删除元素的自定义方法扩展数组
- 无法在主干中使用 BaseView 调用未定义的方法“扩展”
- 将 jQuery 的 .val() 方法扩展到非输入元素
- 在angular 2中使用自定义方法扩展Typescript Type
- 通过重新定义父方法扩展Jquery UI中的小部件
- 用自定义方法扩展DOM元素
- 如何在JavaScript中使用许多方法扩展函数
- 我可以用“静态方法”扩展对象、函数、日期等吗?在节点
- 为显示和隐藏方法扩展了bootstrap-collapse.js
- 如何用一种新方法扩展JavaScript倒计时功能