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



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

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

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

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

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."));
    }
});

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

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

最新更新