当前位置: 首页 > 面试题库 >

在node.js中扩展类的不同方式

颛孙信厚
2023-03-14
问题内容

通常在node.js或javascript中扩展原型类。(js newb)

我正在查看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-merge
将属性从源对象合并到目标对象。

实用程序继承

将原型方法从一个构造函数继承到另一个构造函数。 构造函数的原型将设置为从superConstructor创建的新对象。

还请阅读他们的
资料!

app(同时是用于奇数的原因的函数)是不是一个构造,但应该是一个(纯)对象-的 实例
所作createApplication。因此,这里没有办法进行“类继承”。而且,您不能utils.inherits在同一个构造函数上多次使用它,因为它确实会
覆盖.prototype属性。

取而代之的是,mixin功能将只是复制所有属性proto,然后所有属性从EventEmitter.prototypeapp对象。

而且这仍在尝试扩展属性吗?我有点在这里迷路:

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编写服务器,但在继续前进之前,我想知道将节点扩展到每秒20个查询的一般原则是什么。 我正在编写的服务将主要是数据库的接口,以及对输入数据的身份验证和确认。 问题答案: 负载均衡 对于最简单的网站,您很可能根本不需要任何扩展。只需一个盒子就能让您覆盖。之后,您应该进行负载平衡,就像您提到的那样,每种架构几乎都是相同的(就像您所说的,您

  • 问题内容: 为什么在扩展Node.js类时将变量包装在大括号内,例如? 例如,Trevor Burnham在他的事件驱动CoffeeScript 教程中,通过以下方式扩展了Node的EventEmitter: 问题答案: 这个: 等效于以下JavaScript: 当您使用模块的导出返回一个对象时,这些导出之一就是“类”。使用只是退出返回对象的惯用快捷方式。您也可以这样说: 若你宁可。当您要提取对象

  • 10 Node.js 的 c++ 扩展 Node 的优点是处理 IO 密集型操作,对于互联网应用来说,很大一部分内容都是 IO 处理(包括文件 IO和网络IO),但是还是有部分功能属于计算密集型操作。如果遇到这种计算密集型操作,推荐的解决方案是使用其他语言来实现,然后提供一个服务,让 Node 来进行调用。不过我们这章要讲的是 Node 的 C++ 扩展,也就是说,我们可以通过这种方式是 Node

  • 问题内容: 我对大概要文件节具有通用逻辑,因此我尝试使用对概要文件节的通用逻辑进行创建,并且与该节相关的所有类都应按照我的理解正确扩展此Profile类,但是当我尝试创建时会收到错误消息: CodeIgniter尝试找到我正在其中运行的此类。 我的错误在哪里?或者,也许还有另一种更好的方法来标记出通用逻辑? 问题答案: 我认为您已经将MY_Controller放在/ application / c

  • 我有一个节点。js应用程序,将一些配置信息附加到对象: TypeScript 编译器不喜欢这样,因为 类型没有名为 的对象: TS2339:类型“Global”上不存在属性“myConfig”。 我不想这样做: 我如何扩展< code>Global类型以包含< code>myConfig或者只是告诉TypeScript闭嘴并相信我?我更喜欢第一个。 我不想更改中的声明。我看到了这篇SO帖子,并尝试

  • 问题内容: 我有一个node.js应用程序,该应用程序将一些配置信息附加到该对象: TypeScript编译器不喜欢这样,因为该类型没有名为的对象: TS2339:类型“ Global”上不存在属性“ myConfig”。 我不想这样做: 如何扩展类型以包含或只是告诉TypeScript关闭并信任我?我希望第一个。 我不想更改其中的声明。我看到了这样的帖子,并尝试了这个: 作为扩展现有接口的一种方