gpt4 book ai didi

Javascript - defineProperty 和直接在对象上定义函数的区别

转载 作者:行者123 更新时间:2023-11-29 15:35:43 26 4
gpt4 key购买 nike

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

那么,用起来有什么区别

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

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

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

最佳答案

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

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

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

也请查看 Mozilla Developer Network 中的示例对于此方法和能够使用 define 属性决定 prop 是否可写、可枚举等的配置。

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

关于Javascript - defineProperty 和直接在对象上定义函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com