我有一个问题:在我阅读的大部分或全部关于闭包的教程中,它们最重要的好处被描述为能够定义私有成员。例如,来自极好的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
我必须承认,这两种方法都比传统的面向对象编程语言更复杂,但第二种方法是否更加自然呢? 那么为什么闭包如此受欢迎,它们还有哪些优点,使用闭包创建对象和我刚才描述的方式有什么区别?