这两个例子都不正确。我想你的意思是:
第一的:
var SomeObject;
SomeObject = (function() {
function SomeObject() {
}
SomeObject.prototype.doSomething = function() {
};
SomeObject.prototype.doSomethingElse = function() {
};
return SomeObject;
})();
(注意匿名函数末尾的 return,使用=
而不是:
,以及完成函数分配的分号。)
或者你的意思可能是:
function SomeObject() {
}
SomeObject.prototype.doSomething = function() {
};
SomeObject.prototype.doSomethingElse = function() {
};
(没有匿名封闭函数。)
第二:
function SomeObject() {
}
SomeObject.prototype = {
doSomething: function() {
},
doSomethingElse: function() {
}
};
(请注意,原型的赋值是在函数之外SomeObject
;在这里,我们使用:
是因为我们在对象初始化器中。同样,我们;
在末尾有完成赋值语句。)
如果我是正确的,它们之间几乎没有区别。它们都创建了一个SomeObject
构造函数并将匿名函数添加到其原型中。第二个版本用一个全新的对象(我不推荐)替换了构造函数的原型,其中第一个只是扩充了构造函数已经拥有的原型。SomeObject
SomeObject
一个更有用的形式是:
var SomeObject;
SomeObject = (function() {
function SomeObject() {
}
SomeObject.prototype.doSomething = doSomething;
function doSomething() {
}
SomeObject.prototype.doSomethingElse = doSomethingElse;
function doSomethingElse()
}
return SomeObject;
})();
在那里,我们分配给函数doSomething
并doSomethingElse
具有名称,这在您在调试器中遍历代码时很有用(它们显示在调用堆栈、断点列表等中)。包装所有内容的匿名函数在那里,因此doSomething
anddoSomethingElse
名称不会污染封闭的命名空间。更多:匿名者匿名
我们中的一些人更进一步:
var SomeObject;
SomeObject = (function() {
var p = SomeObject.prototype;
function SomeObject() {
}
p.doSomething = SomeObject$doSomething;
function SomeObject$doSomething() {
}
p.doSomethingElse = SomeObject$doSomethingElse;
function SomeObject$doSomethingElse()
}
return SomeObject;
})();
...这样我们不仅可以看到doSomething
,而且可以SomeObject$doSomething
在列表中看到 。有时这可能会妨碍您,但这是一种风格选择。(另请注意,我使用匿名函数为 加上别名SomeObject.prototype
,以减少输入。)