3

我最近为 node.js 创建了自己的模块,用于 koa 模块。它是一个类似 koa-i18n 的翻译模块。我研究了其他 koa 模块,以了解如何将函数/属性应用于 koa 上下文/请求,其中一些使用 Object.defineProperty 函数,但我在模块中所做的是直接在“this”上应用函数。

那么,使用和使用有什么区别

Object.defineProperty(app.context, 'getSomeValue', { ... });

return function* (next) { this.getSomeValue = function () { ... } }

我还遇到了使用“应用”功能的节点委托模块。这些方法中的哪一种是将函数/属性应用于现有对象的首选方法,优缺点是什么?

4

1 回答 1

1

与直接在对象中设置属性或返回函数对象(在某些方面可以模拟伪私有字段)相比,defineProperty 方法具有特定的优势。

您可以使用 defineProperty 来定义常量,决定它们是否可枚举等等。

您可以在此处查看类似的讨论 -您何时使用 Object.defineProperty()

还请查看Mozilla 开发人员网络中有关此方法的示例以及能够使用定义属性决定 prop 是否可写、可枚举等的配置。

Apply 有点不同,我认为更好的比较是与 JavaScript 调用方法。它与call类似,但主要是示意图上的差异。请参阅此处的注释。Apply 和 Call 可以用于调用方法——大致类似于 Java 等其他语言中的反射。

于 2015-04-03T23:20:59.630 回答