Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance 为什么TypeScript中的派生类instanceof失败?_Inheritance_Typescript_Instanceof - Fatal编程技术网

Inheritance 为什么TypeScript中的派生类instanceof失败?

Inheritance 为什么TypeScript中的派生类instanceof失败?,inheritance,typescript,instanceof,Inheritance,Typescript,Instanceof,我有一个奇怪的问题,instanceof对于TypeScript中的派生类似乎不能正常工作。我的班级结构如下: interface Serializing { serialize(): string } class Storage implements Serializing { // constructor, methods, serialize, ... } class StorageContainer { // constructor, methods, v

我有一个奇怪的问题,instanceof对于TypeScript中的派生类似乎不能正常工作。我的班级结构如下:

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为true(因为派生的类显然是从StorageContainer类派生的),但出于某种原因,它返回false

我还对其他更简单的派生类进行了测试,instanceof确实如预期的那样工作。只有在这种情况下,我没有

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

因此,我的问题是:

  • 有什么值得注意的事情会导致 要中断的功能
  • 什么可能是测试在内部成功的原因 构造函数,但不在外部
  • 关于如何调试此类问题,您有什么建议吗

谢谢

我已经在操场上测试了你的代码,除了得到“重复标识符‘存储’”没问题,第二次测试
StorageContainer的派生实例返回true这不是我的确切代码:如前所述,这只是显示了我的类的结构。不可能发布我所有的代码,因为实际情况要复杂得多。我还创建了一些具有类似结构的小测试示例,但它们的工作方式与预期的一样。这就是为什么我要问,鉴于上述结构,什么样的事情会导致instanceof失败。没有办法知道,你面临的问题可能是很多事情的结果。如果你不能用一个简单的例子来重现这个问题,那么你最好检查实例的原型链,它为
instanceof
返回false。好的,谢谢。那么,这就是想法:创建一个instanceof成功的对象,然后将所有级别的原型字段与失败对象的原型字段进行比较,并查找缺少的/额外的字段?实际上,我真的不明白的是,为什么测试在返回之前仍然在构造函数中成功,但一旦超出构造函数,它们就会失败。。。我想我可以从检查从构造函数返回时对象发生了什么变化开始。我的猜测是,您认为包含
X
实例的变量实际上没有它。也许它什么都没有,也许是一个不同类型的实例。