这个小PHP代码的JavaScript等价物
我希望有一个“静态”方法“create”,在JavaScript代码中返回一个“类”的新实例 在PHP中,我会这样做:这个小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(
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();