Ну, я думаю, проблема в том, что ваша функция конструктора ничего не возвращает.
Когда вы используете оператор new
, если функция конструктора не возвращает объект, значение this
, которое является вновь созданным объектом, возвращается неявно, например:
function Foo () {
this.foo = 'bar';
}
new Foo(); // { foo: 'bar' }
Если вы вызовете функцию с помощью call / apply, она выдаст undefined
, поскольку возвращаемого значения вообще нет:
Foo.call({}); // undefined
Итак, решение было бы вернуть значение this
в ваш конструктор, например ::
function Bar() {
this.bar = 'baz';
//..
return this;
}
Bar.call({}); // { bar: 'baz' }
Также помните, что использование оператора new
не полностью эквивалентно , примените функцию, использующую новый объект в качестве значения this
, потому что при использовании оператора new
созданный объект будет наследовать от прототипа его конструктора, например:
new Bar() instanceof Bar; // true
Bar.call({}) instanceof Bar; // false