2

私は 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!
4

1 に答える 1

6

oneとはtwo同じプロトタイプ (コンストラクターBaseClass) を持っています。Object.getPrototypeOf(one) === Object.getPrototypeOf(two).

の「リサイクル」の代わりにnew BaseClassbase次を使用します。

// var base = new BaseClass(); <-- No!
ClassOne.prototype = new BaseClass();
ClassTwo.prototype = new BaseClass();
于 2012-06-18T14:24:24.953 に答える