我在开发 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!
最佳答案
one
和two
都具有相同的原型(prototype)(构造函数BaseClass
)。 Object.getPrototypeOf(一) === Object.getPrototypeOf(二)
。
不要在 base
中“回收”new BaseClass
,而是使用:
// var base = new BaseClass(); <-- No!
ClassOne.prototype = new BaseClass();
ClassTwo.prototype = new BaseClass();
关于JavaScript instanceof 运算符何时返回 true 应该为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11084799/