代码之家  ›  专栏  ›  技术社区  ›  Yairopro

Javascript-如何更改类的父类?

  •  1
  • Yairopro  · 技术社区  · 6 年前

    class A {}
    class B extends A {}
    class C {}
    

    有没有可能 B C 而不是 A ?

    所以 new B() instanceof C true
    以及 new B() instanceof A false .

    1 回复  |  直到 6 年前
        1
  •  0
  •   Yairopro    6 年前
    B.prototype.__proto__ = C.prototype
    

    这似乎是正确的答案。
    但仍然 it shouldn't be used

    这是演示

    class A {
      f(){
        console.log("I am a A")
      }
    }
    
    class B extends A {}
    
    class C {
      f(){
        console.log("I am a C")
      }
    }
    
    // ----- test B -----
    new B().f() // "I am a A";
    console.log("B is an A: " + (new B instanceof A));
    console.log("B is an C: " + (new B instanceof C));
    
    
    
    // ------- CHANGE ------
    console.log("Changing B's parent class to C !");
    B.prototype.__proto__ = C.prototype;
    
    
    // ------- retest -------
    new B().f() // "I am a C";
    console.log("B is an A: " + (new B instanceof A));
    console.log("B is an C: " + (new B instanceof C));