construtores de ligação / aplicação em JavaScript

Eu estava procurando soluções para chamar construtores de JavaScript com um número arbitrário de argumentos, e encontrei alguns bons posts SO, o que me levou a acreditar que essas três chamadas devem funcionar da mesma forma. No entanto, pelo menos no rinoceronte e no node.js, eles não:

1. f = Date.bind(Date, 2000,0,1)
2. g = Date.bind.call(Date, 2000, 0, 1)
3. h = Date.bind.apply(Date, [2000, 0, 1])

O primeiro tem o resultado desejado:

print(new f()) //=> Sat Jan 01 2000 00:00:00 GMT-0500 (EST)

Mas os outros dois não:

print(new g()) //=> Thu Feb 01 1900 00:00:00 GMT-0500 (EST)
print(new h()) //=> Wed Jun 01 1904 00:00:00 GMT-0400 (EST)

Então alguma coisa deu errado em algum lugar. Pensamentos sobre o que? É uma má ideia misturar coisas comoapply, binde / oucall comnew?

questionAnswers(2)

yourAnswerToTheQuestion