11 Feb 2015

JavaScript instanceof操作符

instanceof 运算符用于判断C是否存在与P上, CP分别为:

  • 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

有两点需要注意:

  • instanceof 操作符只在比较自定义对象时才有意义
  • instanceof 不能比较不同 JavaScript 上下文的对象(比如, 不同window或frame内的对象)

//内置对象

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


Tags:
0 comments