您所做的只是返回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";
});