Ответ 1
Нет, Function.call.apply
и Function.apply
в этом случае не совпадают.
Предположим, что исходный вызывающий вызов
Foo.method(t, x, y, z)
При вызове и применении вместе, как и в коде JavaScript Garden. Это выполняется
Function.call.apply(Foo.prototype.method, arguments);
который (свободно, записывая arguments
в массив-нотации):
Function.call.apply(Foo.prototype.method, [t, x, y, z]);
который вызывает Function.call
с помощью this==Foo.prototype.method
:
Foo.prototype.method.call(t, x, y, z)
который вызывает Foo.prototype.method
с this
, установленным в t
, и аргументы x
, y
и z
. Милая. Также как в комментариях. Мы успешно сделали обертку.
Теперь предположим, что вы оставили только Function.apply
вместо Function.call.apply
, который, по вашему утверждению, семантически эквивалентен. У вас будет
Function.apply(Foo.prototype.method, arguments);
который (свободно)
Function.apply(Foo.prototype.method, [t, x, y, z]);
который вызывает функцию Function
(ugh!) с this
, установленную в Foo.prototype.method
, и аргументы t
, x
, y
и z
.
Не то же самое.