比较object.constructor与其构造函数和instanceof之间有什么区别?

时间:2018-07-11 17:14:22

标签: javascript object constructor instance ecmascript-5

让我们说我有一个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

我的问题是,两者之间有什么区别,哪个更好,为什么?

谢谢。

1 个答案:

答案 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