在IIFE中包装构造函数和原型方法的任何缺点?

时间:2014-03-03 14:17:38

标签: javascript

使用这种模式有什么缺点吗?

var Animal = (function() {
  function Animal(name) {
    this.name = name;
  }

  Animal.prototype.move = function(meters) {
    return alert(this.name + (" moved " + meters + "m."));
  };

  return Animal;

})();

我认为将可读性封装在立即调用的函数表达式中是很好的,我知道这就是CoffeeScript的类编译的内容。

1 个答案:

答案 0 :(得分:1)

它不是那么紧凑,我通常使用这样的快捷键:

var Animal = Object.extend({
    initialize: function (name) {
        this.name = name;
    },
    move: function(meters) {
        return alert(this.name + (" moved " + meters + "m."));
    }
});

var Animal = Class({
    initialize: function (name) {
        this.name = name;
    },
    move: function(meters) {
        return alert(this.name + (" moved " + meters + "m."));
    }
});

否则你的方法没有问题,所以你可以使用它......

数据隐藏有一个优点,你可以通过将构造函数放入闭包来使用静态私有变量(如果我们讨论类)。我们通常在模块级别使用这种方法进行数据隐藏,构造函数通常不值得努力......