让我们说我有一个Dog构造函数
function Dog(name) {
this.name = name;
}
我有该构造函数的一个实例
const myDog = new Dog('Charlie');
据我最近了解,有两种方法可以检查myDog是否是Dog的实例:
1。
console.log(myDog instanceof Dog) //true
2。
console.log(myDog.constructor === Dog) //true
我的问题是,两者之间有什么区别,哪个更好,为什么?
谢谢。
答案 0 :(得分:2)
区别很简单。签出MDN's documentation of instanceOf。如果您有一个实例Fido
,它是GreatDane
的实例,它是Dog
的实例,它是Object
的实例,则将是这种情况:>
Fido instanceof GreatDane // true
Fido instanceof Dog // true
Fido instanceof Object // true
Fido.constructor === GreatDane // true
但是,以下内容将不成立:
Fido.constructor === Dog // false
Fido.constructor === Object // false
因此,您可以看到instanceOf
关键字沿袭,constructor
在查看创建实例的实际函数。
两者都不是更好。这取决于您的情况。您想了解每个对象什么?
正如帕特里克·罗伯茨(Patrick Roberts)在下面的评论中指出的那样,Fido.constructor
是从GreatDane
继承的实际构造函数。而且您可以对其进行修改,因此,如果您曾经更改过构造函数,则比较将返回false
。