Дело в том, что arguments
является массивоподобным объектом.Doing ...
instance.init(arguments);
... передает один аргумент, который является массивоподобным объектом, содержащим определенные аргументы.С другой стороны, выполнение ...
instance.init.apply(instance, arguments);
... передаст массивоподобный объект в качестве отдельных аргументов .Это правда, что настройка instance
является бесполезной, потому что вы уже написали ее, но если вы используете .apply
, вам просто нужно также установить значение this
.
Быстрый пример различия
function log(a, b, c) {
console.log(a, b, c);
}
function log2() {
log.apply(null, arguments); // `this` value is not meaningful here,
// it's about `arguments`
}
function log3() {
log(arguments);
}
log(1, 2, 3); // logs: 1, 2, 3
log2(1, 2, 3); // logs: 1, 2, 3
log3(1, 2, 3); // logs: <Arguments>, undefined, undefined
// where <Arguments> contains the values 1, 2, 3