2

Javascriptinstanceof 操作符可以用来比较两个操作数的构造函数 constructor。但这个只有在比较自定义对象才有意义。当用来比较 Javascript 内置的对象时就如同上篇介绍的操作符 typeof 一样用处不大。

比较自定义对象

function Foo() {}
function Bar() {}
Bar.prototype = new Foo();

new Bar() instanceof Bar; // true
new Bar() instanceof Foo; // true

// This just sets Bar.prototype to the function object Foo,
// but not to an actual instance of Foo
Bar.prototype = Foo;
new Bar() instanceof Foo; // false

比较内置对象

new String('foo') instanceof String; // true
new String('foo') instanceof Object; // true

'foo' instanceof String; // false
'foo' instanceof Object; // false

这里有点特别重要的地方需要注意,那就是 instanceof 操作符无法比较两个处于完全不同上下文坏境下的对象(例如浏览器中的不同文档对象)。这是因为它们的构造函数不可能会是同一个对象。

总结

综上所述,我们知道 instanceof 操作符最合适的使用坏境是比较两个相同上下文背景下的自定义对象的构造函数,正如上篇介绍的 typeof 操作符,其他坏境下使用作用不大。

@nightire 凡哥的博文 - 《理解 JavaScript(三)》 也介绍了部分关于 instanceof 操作符的使用。

参考

http://bonsaiden.github.io/JavaScript-Garden/#types.instanceof


StephenLi
7k 声望488 粉丝

知不足。