我们知道JavaScript中typeof,instanceof,Object.prototype.toString可以用来检测变量类型,我们针对instanceof和constructor再来讲一讲他们在实例和原型中的使用。
我们先看一段代码:
function Ninja(){}
const ninja = new Ninja();
typeof ninja === object //true
ninja instanceof Ninja //true
ninja.constructor === Ninja //true
1.instanceof
instanceof的作用:会检查右边构造函数的原型对象(prototype),是否在左边对象的原型链上。
//所以可用于检测实例是否是由某个构造函数而来的
function Ninja(){}
const ninja = new Ninja();
ninja instanceof Ninja; //true,其中原理就是instanceof会检查右边构造函数的原型对象(prototype),是否在左边对象的原型链上。
2.constructor
constructor指向创建对象的函数的引用(指针),也可以理解为constructor指向对象的构造函数。
所以下面代码输出true
function Ninja(){}
const ninja = new Ninja();
ninja.constructor === Ninja //true
更复杂的constructor指向,我们下一篇文章描述,主要写在利用原型链继承时候constructor指向的修正。
参考文章:
《JavaScript忍者秘籍》第七章
https://blog.csdn.net/u014465934/article/details/88937288
https://blog.csdn.net/u014465934/article/details/91623138
https://www.jianshu.com/p/37677dd728f5
https://www.cnblogs.com/walkingp/archive/2009/09/18/1568912.html