Javascript 方法能否返回新对象?

Javascript 方法能否返回新对象?,javascript,class,instance,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(); 大多数时候,是的 第三个不是a===b等价物,它们是a===

详情如下:

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();
大多数时候,是的

第三个不是a===b等价物,它们是a===b等价物,但是是的

需要注意的一个关键问题是,一旦你不再像对待Java<8那样对待它,你可能会自找麻烦,因为JavaScript中
这个
的本质

doSomethingAsync()
  .then(AnObject.alloc)  // boom!
  .then(useInstance);
其中,
新建一个对象()
总是可以正常工作

var getObj = AnObject.alloc;
var obj = getObj( );
不会

也不会:

$.ajax( ).success(AnObject.alloc);
因为
是在调用时确定的,而不是在定义方法时绑定的(或者在最后一种情况下,甚至是在提供给回调时引用)

你可以考虑:

AnObject.alloc = function (config) { return new AnObject(config); };
现在它是防弹的

或者,使用一个通用的
alloc
方法,并将它绑定到每个构造函数

function alloc (config) { return new this(config); }

AnObject.alloc = alloc.bind(AnObject);
AnotherObject.alloc = alloc.bind(AnotherObject);

现在它是防弹的

您的第二个和第一个代码段是等效的,是的。