应该为false时,JavaScript instanceof运算符返回true?

时间:2012-06-18 14:18:43

标签: javascript function new-operator prototype instanceof

我正在开发一个JavaScript应用程序并且遇到了这种奇怪的行为 任何人都可以向我解释为什么

function BaseClass() {}
function ClassOne() { this.bar = "foo"; }
function ClassTwo() { this.foo = "bar"; }

var base = new BaseClass();
ClassOne.prototype = base;
ClassTwo.prototype = base;

var one = new ClassOne();
var two = new ClassTwo();
one instanceof ClassTwo && two instanceof ClassOne;
// The line above will return true, but i think it should return false,
// because obviously one is not an instance of ClassTwo!

1 个答案:

答案 0 :(得分:6)

onetwo都有相同的原型(构造函数BaseClass)。 Object.getPrototypeOf(one) === Object.getPrototypeOf(two)

而不是new BaseClass中的“回收”base,请使用:

// var base = new BaseClass(); <-- No!
ClassOne.prototype = new BaseClass();
ClassTwo.prototype = new BaseClass();