这个小PHP代码的JavaScript等价物

这个小PHP代码的JavaScript等价物,php,javascript,class,inheritance,static,Php,Javascript,Class,Inheritance,Static,我希望有一个“静态”方法“create”,在JavaScript代码中返回一个“类”的新实例 在PHP中,我会这样做: abstract class Object { public static function create() { return new static; } } class Foo extends Object { } $foo = Foo::create(); 在JavaScript中,我有: var Object = function(

我希望有一个“静态”方法“create”,在JavaScript代码中返回一个“类”的新实例

在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();
有可能吗?如果是,我应该补充什么


感谢您的帮助。

尽管“静态”的语义可能会混淆,但实际上非常简单:

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

对象可能已经被保留,但假设这只是一个例子。@JonathanLonowski:Boolean不是从Object继承的,它是从Object.prototype继承的,Object.prototype是一个完全不同的对象……是的,但对象也不是从Object继承的,它们是从Object.prototype继承的,这是不一样的。对象有很多静态方法,比如keys(),它们不会出现在对象上…@JonathanLonowski:我同意这一点,但不是支持它的错误陈述。这些东西有点让人困惑,可能是因为JS中没有足够的保留字来像其他语言那样具体地描述模式……谢谢你的回答,但这不是我想要的。您的解决方案包括为每个子类创建一个create方法,我希望自动完成。好的,谢谢您的澄清。在对答案的编辑中,我会做得更好。这将是一个方向,尽管我认为OP也希望同时建立继承(不仅仅是从
对象.prototype
)的自动插入)。@CrazyTrain:这是他想要做的最小代码,这是一个起点,因为它不能再简单了。有足够的空间放置一个对象。创建调用或任何需要的东西。这只是一个简单的模板,它不使用硬编码的名称来实现它的神奇,让它可以应用于任何地方。谢谢,但你确定这是有效的吗?在我看来,它将向类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();