return new game(arguments);
Вы передаете объект arguments, всего один объект. Это один из аргументов.
Направить аргументы к нормальной функции, вы используете будет применяться:
var fn = function() {
otherFn.apply(null, arguments);
};
Но это делает 2 вещи, она проходит в массиве аргументов, чтобы использовать в качестве аргументов, но он также устанавливает контекст выполнения (значение от this
). Но функция-конструктор создает ее собственную ценность. Это представляет проблему ...
Пересылка аргументов конструктору намного сложнее в простой JS. В сценарии кофе это легко, но он компилируется в сумасшедший JS. See here
Трюк состоит в том, чтобы создать новый подкласс с конструктором no-op и вызвать конструктор вручную.
var newConstructor = function() {}; // no-op constructor
newConstructor.prototype = Game.prototype; // inherit from Game
var child = new newConstructor(); // instantiate no-op constructor
var result = Game.apply(child, arguments); // invoke real constructor.
Но это довольно волосатые. Возможно, вам следует пересмотреть свой подход.
Ого, это довольно интересно прямо там и намного проще, чем мое решение. Он работает, потому что 'bind' возвращает функцию для всех настроек только для правильного вызова. Очень гладкий. –