这两个使用构造函数和闭包创建的对象到底有什么不同?a
b
该属性__proto__
对使用闭包无法实现的任何事情有用吗?我应该在不同的情况下使用这些技术吗?内存使用有区别吗?
( jsFiddle )
window.MODULE = {};
MODULE.constructor = function(){
this.publicVariable = 10;
};
MODULE.constructor.prototype.publicMethod = function(){
return this.publicVariable;
};
//-------------------------------//
MODULE.closure = (function(){
var publicMethod = function(){
return this.publicVariable;
};
return function(){
var obj = {};
obj.publicVariable = 10;
obj.publicMethod = publicMethod;
return obj;
};
}());
//-------------------------------//
var a = new MODULE.constructor();
console.log("constructor", a.publicMethod(), a)
var b = MODULE.closure();
console.log("closure", b.publicMethod(), b)
还可以看到更复杂的 jsFiddle与一些私有和静态属性的比较——据我所知,这两种技术的工作原理都是一样的......