instanceof 运算符用于判断C是否存在与P上, C与P分别为:
C
: 运算符右侧的函数的prototype属性P
: 运算符左侧对象的原型链function Animal(){};
function Cat(){};
var animal = new Animal();
animal instanceof Animal; // true, 因为Animal.prototype正是animal的原型
animal instanceof Cat; // false,因为Cat.prototype不在animal的原型链上
animal instanceof Object; // true,因为Object.prototype是Animal.prototype的原型, 故而因为Object.prototype在animal的原型链上
Animal.prototype instanceof Object // true, Animal.prototype的原型为Object.prototype
Animal.prototype = {};
animal instanceof Animal; // false, Animal.prototype已被修改, 新prototype属性不在animal的原型链上.
Cat.prototype = new Animal();
var cat = new Cat();
cat instanceof Cat; // true
cat instanceof Animal; // true
有两点需要注意:
//内置对象
new String('animal') instanceof String; // true
new String('animal') instanceof Object; // true
'animal' instanceof String; // false
'animal' instanceof Object; // false
//不同上下文, 假定存在与当前不同的名为other的frame
new Array() instanceof window.frames["other"].Array //false