我的问题如下: 在我阅读的关于闭包的大多数或所有教程中,它们的首要资产被描述为它们能够定义私有成员。例如,来自神话般的 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 语言长得多,但第二种方式不是更自然吗?那么为什么闭包如此受欢迎,它们还有哪些其他资产以及使用闭包或我刚才描述的方式创建对象之间有什么区别?