Javascript-defineProperty和直接在对象上定义函数之间的区别 我最近创建了自己的NoDE.js模块,用于膝关节炎模型。这是一个类似于koa-i18n的翻译模块。我研究了膝关节炎的其他模块,以了解函数/属性如何应用到膝关节炎上下文/请求,其中一些使用Objut.DealEdfEngy函数,但我在模块中所做的是直接在“这个”上应用函数。

Javascript-defineProperty和直接在对象上定义函数之间的区别 我最近创建了自己的NoDE.js模块,用于膝关节炎模型。这是一个类似于koa-i18n的翻译模块。我研究了膝关节炎的其他模块,以了解函数/属性如何应用到膝关节炎上下文/请求,其中一些使用Objut.DealEdfEngy函数,但我在模块中所做的是直接在“这个”上应用函数。,javascript,ecmascript-6,koa,defineproperty,Javascript,Ecmascript 6,Koa,Defineproperty,那么,使用 Object.defineProperty(app.context, 'getSomeValue', { ... }); 及 我还遇到了使用“应用”功能的节点代理模块。 以下哪种方法是将函数/属性应用于现有对象的首选方法?优缺点是什么?defineProperty方法与直接在对象中设置属性或返回函数对象(在某些情况下可以模拟pesudo私有字段)相比具有特定的优势 您可以使用defineProperty来定义常量,以决定它们是否可枚举,等等 你可以在这里查看类似的讨论- 还要查看此

那么,使用

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

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

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

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

你可以在这里查看类似的讨论-

还要查看此方法的示例和配置,以便能够使用define属性确定prop是否可写、可枚举等


Apply有点不同,我认为比较好的方法是使用JavaScript调用方法。这与类似,但主要是示意图上的差异。请参见此处的注释。Apply和Call可以用来调用一个方法,大致就像Java等其他语言中的反射一样。

通常没有利弊,也不是首选。它们都是为了不同的目的。如果希望具有只读或不可枚举的属性,则需要使用
defineProperty
。其他技术也一样。一些可能是相等的,并且由于一致性,您可能会使用一个而不是另一个。好的,因此使用“this.getSomeValue”是读写的,并且可能被另一个模块覆盖,该模块也在“this”上定义了相同的属性名?您编写它的方式是一个语法错误。但只要不使用
Object.defineProperty(app.context,'getSomeValue',{writable:false,value:someValue})
app.context
的属性
getSomeValue
可以覆盖任何其他js代码。如果你真的应该强制执行
writable:false
,这取决于具体情况,在大多数情况下,你只想对常量执行该操作。你说得对,我的错。谢谢你的解释。还有一件事<代码>此具有
状态
属性。如何使用
defineProperty
函数对
this.state
进行定义并定义函数
this.state
在源代码中定义为
context.state={}
虽然这类问题非常复杂,因为它非常广泛,但您应该考虑为什么要使用
defineProperty
而不是只使用
context.state.someFunction=function(){}
return function* (next) { this.getSomeValue = function () { ... } }