我回答一个问题关于闭包在这里所以用这个例子:从JS关闭创建对象:我应该使用“新”关键字?
function Constructor() {
var privateProperty = 'private';
var privateMethod = function(){
alert('called from public method');
};
return {
publicProperty: 'im public',
publicMethod: function(){
alert('called from public method');
},
getter: privateMethod
}
}
var myObj = new Constructor();
//public
var pubProp = myObj.publicProperty;
myObj.publicMethod();
myObj.getter();
//private - will cause errors
myObj.privateProperty
myObj.privateMethod
用户评论我的回答说:
此外,如果你的函数明确地返回一个对象,它是不是一个好实践与新称呼它,因为这是一种误导 - 如果使用新的你所期望的结果是构造
的实例我通常使用新的创建对象。但为什么不是一个好的做法?它似乎是使用新的和不使用新的返回相同的东西。什么是从闭包创建对象的正确方法?
像这样:http://jsfiddle.net/DZTC8/1/都返回相同的东西,有或没有'new' – Joseph 2012-02-16 02:47:25
@Joseph:我的观点是它使'instanceof'变得奇怪。返回的对象*不是构造函数*的实例,而是用户期望的,而只是一个对象。 – Ryan 2012-02-16 02:48:58
+1“怪异”。谢谢!现在我明白了。 – Joseph 2012-02-16 02:58:21