gpt4 book ai didi

Javascript 闭包与 Object.createProperty

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

我的问题如下:在我读到的关于闭包的大部分或所有教程中,它们的首要 Assets 被描述为能够定义私有(private)成员。例如,来自神话般的 nettuts 网站:http://net.tutsplus.com/tutorials/javascript-ajax/digging-into-design-patterns-in-javascript/ .我的问题如下 - 当您可以使用 Object.definteProperty 时,为什么您会选择使用闭包创建对象,它们的语法有些不自然?例如

var o = {}; // Creates a new object

// Example of an object property added with defineProperty with a data property descriptor
Object.defineProperty(o, "a", {value : 37,
writable : false,
enumerable : true,
configurable : true});
// 'a' property exists in the o object and its value is 37

我必须承认这两种方式都比传统的 OOP 语言长得多,但是第二种方式不是更自然吗?那么为什么闭包如此流行,它们还有哪些其他优势?使用闭包创建对象或使用我刚才描述的方式创建对象之间有什么区别?

最佳答案

Object.defineProperty仍然定义 public 属性,而闭包允许隐私(你不应该谈论私有(private)“成员”,它只是局部变量)。

您的示例使用 defineProperty 定义可枚举、可写和可配置的数据属性,可以(并且应该)通过默认属性分配(也适用于旧浏览器)缩写:

o.a = 37;

并非所有对象都需要用闭包创建(在你的例子中我想不出任何应用程序),但你可能想学习 How do JavaScript closures work? .

关于Javascript 闭包与 Object.createProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14922279/

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