2012-06-18 50 views
2

我正在研究一個JavaScript應用程序,並發現了這種奇怪的行爲。
任何人都可以請向我解釋爲什麼JavaScript instanceof運算符返回true時應該是false?

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! 

回答

6

兩個onetwo具有相同的原型(構造函數BaseClass)。 Object.getPrototypeOf(one) === Object.getPrototypeOf(two)

相反new BaseClassbase 「循環利用」 的,使用方法:

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

這是真的,雖然T.J.克勞德那天回答了一個問題,詳細解釋了爲什麼這不一定是最好的做法。我會看看我能否找到它。 – Pointy

+0

+1很好的答案。這是一個非常棘手的問題,並發現我以前已經抓住了! –

+0

@Pointy你的意思是[這一個](http://stackoverflow.com/a/11072626)? –

相關問題