Когда вы используете return obj
в конструкторе функции, он возвращает тот фактический объект, а не объект, который был создан внутри.Если вы хотите, чтобы он работал правильно, просто определите init в конструкторе следующим образом:
this.init = function() { };
Чтобы дать еще несколько деталей: когда вы вызываете new Func
, внутри происходит то, что новый объектсоздается прототип, установленный на прототип функции), и вызывается функция конструктора с объектом, установленным как this
.В конце конструктора возвращается тот же объект, если только вы не вернете другой объект вручную, и в этом случае будет возвращен этот объект, который, очевидно, не будет иметь тот же прототип.