具有重复类名的Javascript类模式

时间:2013-03-14 22:32:04

标签: javascript

我想在javascript中模拟类,并提出了这个方案......

var Random = function(a){ // class name used here
    var Random = function(a){ // and used again here
        this.valueOf = function(){
            return Math.random()
        }
        this.under = function(limit){
            return this*limit
        }
        this.floor = function(limit){
            return Math.floor(this*limit)
        }
    }
    return new Random(a)
}

var rnd = Random()

console.log(rnd*20<<0)

对我来说命名似乎很常见,TitelCase中的类名和camelCase中的实例。我将类包装两次,以便我可以返回一个实例,因为我不喜欢在我的主代码中使用new Thing

让我觉得最不寻常的事情就是为两个包装器使用相同的类名。这种模式有任何技术问题吗?

有没有更简单的方法来实现同样的目标?

1 个答案:

答案 0 :(得分:1)

这是一个非常低效的模式,因为它在每次调用时都会创建一个新的构造函数,并且它不会利用原型继承。另外,仅取决于大写以表示构造函数不利于维护。至少使用new Foo(),很明显正在返回一个新实例。

如果你不喜欢使用new(我无法理解为什么),那么将构造函数包装在一个调用函数中,其名称可以表示它们的作用,如newRandom或类似的。

关于代码,我不知道你为什么使用函数表达式而不是声明。内部函数不需要使用与外部函数相同的名称,实际上内部函数根本不需要名称:

function X(name) {
  return new (function(name) {
    this.name = name;
  })(name)
}

var a = X('a');
a.name; // a

但我并不是建议你这样做。