0

如果我定义了两个类如下...有没有一种方法,以保持相对于子超?

class A { 
    getParentInstance(...args) { 
    return new super.constructor(...args); 
    } 
} 

class B extends A {} 

console.log((new B).getParentInstance().constructor.name); 

Object登录到控制台,而不是我所希望的A。这是由于在super引用A.prototype.getParentInstanceA超类具体是Object。这是相对于可替换地,这将是super是相对于在原型链中的电流电平 - 用于B这将是A

我的问题是:有没有一种方法来定义方法,以便在继承时在原型链的每个级别使用超级相对?有效地导致...

(new B).getParentInstance().constructor.name === 'A' 
+0

像这样的工厂方法通常是静态的... – Alnitak

回答

0

Object.getPrototypeOf()魔术似乎是招:

class A { 
    getParentInstance(...args) { 
    const thisProto = this.constructor.prototype; 
    const RelativeSuperConstructor = Object.getPrototypeOf(thisProto).constructor; 
    return new RelativeSuperConstructor(...args); 
    } 
} 

class B extends A {} 

console.log((new B).getParentInstance().constructor.name); 

导致正确的 “超级”被抓住,因此根据需要记录'A'

0

你可以尝试这样的事情

class A { 
    static getParentConstructor() { 
    return Object; 
    } 
} 

class B extends A { 
    static getParentConstructor() { 
    return A; 
    } 
} 

var b = new B(); 
var a = new (b.constructor.getParentConstructor())(); 
+0

是啊,这是一个很好的解决方案 - 我希望,虽然不通过可能的话使用继承有冗余代码。 –

+0

想出一个办法做到这一点上面。 –

相关问题