如果我知道我只会在下面创建MyClass
函数的一个实例,那么您更喜欢我下面的两个片段中的哪一个?我应该坚持使用后者,即使我知道我只会创建一个函数实例吗?
我知道在函数的所有实例之间共享方法时,prototype
从性能角度来看很有用,但在这种情况下,我希望听到您的意见。
var MyClass = (function () {
var cls = function () { };
cls.prototype = {
init: function(data){
}
};
return cls;
})();
VS
var MyClass = (function () {
var cls = function () {
this.init = function(data){
}
};
return cls;
})();
答案 0 :(得分:1)
您的第二个代码段是语法错误,您尝试将属性初始值设定项放在需要语句的位置。 (不再是)
如果您只需要一个对象需要启用init
功能,那么:
var MyObject = {
init: function(data) {
// ...
}
};
然后你甚至不需要调用一个函数来创建它,它已经存在了。
如果你想拥有真正的私有变量等(我假设这是你的外部匿名函数的原因),那么:
var MyObject = (function() {
var trulyPrivateDataHere;
return {
init: function(data) {
// ...
}
};
})();
我更喜欢这个,因为它清晰直接:你正在创建实际的对象。如果你只想创建一个实例,我认为不需要构造函数。
但是如果它有是一个构造函数,我想我非常勉强更喜欢你的第二个选项,因为它更简单,而且简单是好的,除非需要为了复杂性。