网站搜索

继承 - 为什么在 TypeScript 中 instanceof 会对派生类失效?


我遇到了一个奇怪的问题,在 TypeScript 中,instanceof 对派生类似乎不能正常工作。我的类的结构如下:

interface Serializing 
{
    serialize(): string 
}

class Storage implements Serializing
{
    // constructor, methods, serialize, ...
}

class StorageContainer
{
    // constructor, methods, various methods that act on storage_, ...

    protected storage_: Storage;
}

class Derived extends StorageContainer
{
    constructor()
    {
        super();

        let test1 = this instanceof Derived; // succeeds
        let test2 = this instanceof StorageContainer; // succeeds
    }

    // ... constructor, methods, ...
}

然后我使用这些类运行这个方法:

testInstanceofOnDerivedClasses()
{
    let derived = new Derived();

    let test1 = derived instanceof Derived; // succeeds
    let test2 = derived instanceof StorageContainer; // fails?
}

我当然期望 test2 为真(因为类 Derived 明显是从类 StorageContainer 派生的),但出于某种原因它返回了假...

我也对其他更简单的派生类进行了测试,并且它们的 instanceof 确实按预期工作。只有在我遇到的这个特定情况下,它不起作用。

同样值得注意的是:当我在 Derived 的构造函数中进行这两个测试时,它们都成功了……

所以,我的问题是:

  • 有哪些情况可能导致 instanceof 功能失效?
  • 有什么可能的原因导致测试在构造函数内部成功,但在外部不成功?
  • 你有没有关于如何调试这种问题的任何建议?

谢谢!