instanceof 可以用来确定实例与原型之间是否存在关系
只有当原型与实例有关系的时候 才能依赖于 instanceof 确定
function SpecialArray(){ //创建数组 var values = new Array(); //添加值 values.push.apply(values, arguments); //添加方法 values.toPipedString = function(){ return this.join("|"); }; //返回数组 return values;}var colors = new SpecialArray("red", "blue", "green");console.log(colors instanceof SpecialArray) //false
colors的实际构造函数为 SpecialArray 里面的 Array 虽然是通过new SpecialArray 创建的实例 但实际上 跟SpecialArray构造函数或构造函数的原型属性之间没有关系
因此不能依赖 instanceof 来确定对象
实例对象的可能同时与几个原型之间都关系 因为所有对象都继承了Object
console.log(colors instanceof Object); //trueconsole.log(colors instanceof Array); //true
由于原型链的关系,可以说 colors 是 Object、Array中任何一个类型的实例
判断原型与实例的关系还可以通过 isPrototypeOf() 方法
用法:
console.log(Object.prototype.isPrototypeOf(colors)) //true