方法可以返回一个新对象吗?

时间:2015-05-10 14:55:57

标签: javascript class instance

以下是:

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();

1 个答案:

答案 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);

现在它是防弹的。