Fábrica de objetos em JavaScript

Na verdade, não há uma maneira fácil de instanciar um objeto com uma função de construtor e uma matriz de argumentos para o construtor.

Este é um pequeno snippet que define uma buildfunção que permite que você faça isso:

cache = {}
build
= (ctor, args) ->
f
= if cache[args.length]?
cache
[args.length]
else
argumentsSignature
= ("arg#{n}" for n in [0..args.length-1]).join(',')
cache
[args.length] = new Function "ctor,#{argumentsSignature}", "return new ctor(#{argumentsSignature});"
f
.apply null, [ctor].concat(args)

Agora, dada uma classe Foo, como:

class Foo
constructor: (a,b) ->
console
.log(a,b)

Você pode fazer:

build Foo, [10,20]