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);
现在它是防弹的 您的第二个和第一个代码段是等效的,是的。