Inheritance 为什么TypeScript中的派生类instanceof失败?
我有一个奇怪的问题,instanceof对于TypeScript中的派生类似乎不能正常工作。我的班级结构如下: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
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
实例的变量实际上没有它。也许它什么都没有,也许是一个不同类型的实例。