Javascript - defineProperty与直接定义对象上的函数之间的区别

时间:2015-04-03 19:53:45

标签: javascript ecmascript-6 koa defineproperty

我最近为node.js创建了自己的模块,用于koa模块。它是一个像koa-i18n这样的翻译模块。我已经研究了其他koa模块,看看函数/属性如何应用于koa上下文/请求,其中一些使用了Object.defineProperty函数,但我在模块中所做的是直接在&#39上应用函数;这'

那么,使用

之间有什么区别
Object.defineProperty(app.context, 'getSomeValue', { ... });

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

我还遇到了使用' apply'的节点代理模块。功能。 以下哪种方法是将函数/属性应用于现有对象的首选方法,有哪些优缺点?

1 个答案:

答案 0 :(得分:1)

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

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

您可以在此处查看类似的讨论 - when do you use Object.defineProperty()

另请查看Mozilla Developer Network中此示例的示例以及能够使用define属性判断道具是否可写,可枚举等的配置。

Apply有点不同,我认为与JavaScript调用方法的比较更好。它类似于call,主要是示意性差异。见这里的注释。 Apply和Call可用于调用方法 - 大致类似于Java等其他语言的反射。