您所做的只是返回A.prototype
对象。您并没有真正初始化任何东西,也没有使用结果。
console.log(A.prototype === A.prototype.init()); // true
因此,除非您有特定用途,否则我会说,不,这不是一个好习惯。
不确定为什么要避免new
,但无论如何,您可以更改构造函数,以便可以在有或没有的情况下调用它,new
并且仍然像构造函数一样工作。
function A() {
var ths = Object.create(A.prototype);
ths.foo = "bar";
return ths;
}
现在,如果您使用new
. A.prototype
不管怎样,你都会得到一个继承自的新对象。
您仍然可以使用.init()
方法,但您不妨将逻辑放在构造函数中。
此外,您可以轻松创建一个工厂来处理那一点样板代码。
function Ctor(fn) {
return function() {
var ths = Object.create(fn.prototype);
fn.apply(ths, arguments);
return ths;
};
}
所以现在你会像这样创建你的构造函数:
var A = Ctor(function() {
this.foo = "bar";
});