单个函数实例的原型

时间:2013-03-30 12:05:26

标签: javascript oop

如果我知道我只会在下面创建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;
})();

1 个答案:

答案 0 :(得分:1)

您的第二个代码段是语法错误,您尝试将属性初始值设定项放在需要语句的位置。 (不再是)

如果您只需要一个对象需要启用init功能,那么:

var MyObject = {
    init: function(data) {
        // ...
    }
};

然后你甚至不需要调用一个函数来创建它,它已经存在了。

如果你想拥有真正的私有变量等(我假设这是你的外部匿名函数的原因),那么:

var MyObject = (function() {
    var trulyPrivateDataHere;

    return {
        init: function(data) {
            // ...
        }
    };
})();

我更喜欢这个,因为它清晰直接:你正在创建实际的对象。如果你只想创建一个实例,我认为不需要构造函数。

但是如果它是一个构造函数,我想我非常勉强更喜欢你的第二个选项,因为它更简单,而且简单是好的,除非需要为了复杂性。