我想要一个"static"方法"create",它在我的JavaScript代码中返回一个"class"的新实例。
在PHP中,我会这样做:
abstract class Object {
public static function create() {
return new static;
}
}
class Foo extends Object { }
$foo = Foo::create();
在JavaScript中,我有:
var Object = function() { };
var Foo = function() { };
Foo.prototype = new Object;
我想能够做到:
var foo = Foo.create();
有可能做到吗?如果是,我应该补充什么?
谢谢你的帮助。
它实际上非常简单,尽管可能会混淆什么是"静态"的语义:
function Foo(){
this.bar=true;
}
Foo.create= function(){ return new this; };
var foo = Foo.create();
根据OP的要求,替代版本适用于所有构造函数:
function Foo(){
this.bar=true;
}
Function.prototype.create= function(){ return new this; };
var foo = Foo.create();
我不确定这是否是你想要的,但它可能会有所帮助。
var Foo = {
create: function () {
function F() {}
// Add any default properties/methods/etc.
F.prototype.bar = true;
F.prototype.dr = function() { return "Pepper"; };
// Return a new object containing defaults listed above
return new F();
}
};
var baz = Foo.create();