继承 - 为什么在 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 功能失效?
- 有什么可能的原因导致测试在构造函数内部成功,但在外部不成功?
- 你有没有关于如何调试这种问题的任何建议?
谢谢!