связывание/применение конструкторов в JavaScript

Я искал решения для вызова конструкторов Javascript с произвольным числом аргументов. количество аргументов и нашел несколько хороших сообщений SO, которые заставили меня поверить, что эти три вызова должны работать одинаково. Однако, по крайней мере, в rhino и node.js они этого не делают:

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])

Первый дает желаемый результат:

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

Но два других нет:

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)

Значит, что-то где-то пошло не так. Мысли о чем? Это просто плохая идея смешивать такие вещи, как apply, bindи/или callс new?

10
задан Mark Reed 15 May 2012 в 06:03
поделиться