javascript中的通用返回类型

时间:2014-05-07 02:10:53

标签: c# javascript generics

假设我使用C#进行通用克隆实现:

public class Parent<T> where T : Parent, new()
{
    public T Clone()
    {
        return new T();
    }
}

public class Child : Parent<Child>{ }

这样,使用new Child().Clone()将返回类型为Child的对象,而不是父对象。

是否有与javascript等效的解决方案?

我能想到的最多就是使用这样的函数指针:

var parent = function(){
};
parent.prototype.clonePointer = function(){ return new parent(); };
parent.prototype.clone = function(){
        return this.clonePointer();
    };

var child = function(){

};
child.prototype = Object.create(parent.prototype);
child.clonePointer = function(){ return new child(); };

有没有比这更好的解决方案?

1 个答案:

答案 0 :(得分:2)

如果您将constructor设置回其原始值,即Child,则正确建立继承:

function Child() {
    Parent.call(this);
}

Child.prototype = Object.create(Parent.prototype, {
    constructor: {value: Child}
});
// or, instead of passing a property descriptor
Child.prototype.constructor = Child;
// (but this makes `constructor` enumerable)

克隆方法可以像

一样简单
Parent.prototype.clone = function() {
    return new this.constructor();
};

另见Classical inheritance with Object.create