我最近为node.js创建了自己的模块,用于koa模块。它是一个像koa-i18n这样的翻译模块。我已经研究了其他koa模块,看看函数/属性如何应用于koa上下文/请求,其中一些使用了Object.defineProperty函数,但我在模块中所做的是直接在&#39上应用函数;这'
那么,使用
之间有什么区别Object.defineProperty(app.context, 'getSomeValue', { ... });
和
return function* (next) { this.getSomeValue = function () { ... } }
我还遇到了使用' apply'的节点代理模块。功能。 以下哪种方法是将函数/属性应用于现有对象的首选方法,有哪些优缺点?
答案 0 :(得分:1)
与直接在对象中设置属性或返回函数对象(在某些方面可以模拟伪随机字段)相比,defineProperty方法具有特定的优势。
您可以使用defineProperty来定义常量,以确定它们是否可枚举等。
您可以在此处查看类似的讨论 - when do you use Object.defineProperty()。
另请查看Mozilla Developer Network中此示例的示例以及能够使用define属性判断道具是否可写,可枚举等的配置。
Apply有点不同,我认为与JavaScript调用方法的比较更好。它类似于call,主要是示意性差异。见这里的注释。 Apply和Call可用于调用方法 - 大致类似于Java等其他语言的反射。