以下是:
function AnObject () {}
AnObject.alloc = function () { return new this }
var obj1 = AnObject.alloc();
相当于:
var object1 = new AnObject();
同样:
var obj1 = new AnObject().init();
var obj2 = AnObject.alloc().init();
答案 0 :(得分:0)
大部分时间,是的。
第三个不是a === b
等价的,它们是typeof a === typeof b
等价的,但是是的。
需要注意的一件事是,只要你停止像Java一样对待它< 8,由于JavaScript中this
的性质,你可能会遇到麻烦。
doSomethingAsync()
.then(AnObject.alloc) // boom!
.then(useInstance);
new AnObject()
始终有效
var getObj = AnObject.alloc;
var obj = getObj( );
不会。
也不会:
$.ajax( ).success(AnObject.alloc);
因为this
是在调用时确定的,并且未定义方法的定义(或者在最后一种情况下,甚至引用,因为它被提供给回调)。
您可以考虑:
AnObject.alloc = function (config) { return new AnObject(config); };
现在它是防弹的。
或者,使用通用的alloc
方法,并将bind
添加到每个构造函数中。
function alloc (config) { return new this(config); }
AnObject.alloc = alloc.bind(AnObject);
AnotherObject.alloc = alloc.bind(AnotherObject);
现在它是防弹的。