1

JavaScript の達人、ここにあなたのためのパズルがあります:

function aFunc(){}
function bFunc() {}
aFunc.prototype = bFunc.prototype;
a = new aFunc();
console.log(a instanceof bFunc); //true!

なぜaのインスタンスbFuncですか?

もしそうなら、私はこれを理解することができました:

function aNext(){}
function bNext(){}
aNext.prototype = new bNext();
a = new aNext();
console.log(a instanceof bNext);

..しかし、プロトタイプでは、私には非常に奇妙に思えます。上記のプロトタイプ コードの実用的なアプリケーションは、Professional JavaScript for Web Developers book (ch 6、最後のページ) にあります。

編集: Blender に感謝しますが、ここにそれぞれ新しい謎があります: 単一の同じオブジェクトから継承された 2 つのオブジェクトがある場合、それらは互いにインスタンスです (ただし、それらは完全に異なります)!

function Horse(){} //class chain can be very long
function Pig(){}
Horse.prototype = Object.prototype;
Pig.prototype = Object.prototype;
a = new Pig();
console.log(a instanceof Horse); //true!

どうすれば問題を解決できますか? 豚がすべて動物である場合(過去に同じプロトタイプを持っている場合)、豚が馬ではないことをどのように判断できますか?

4

2 に答える 2

0

答えは: pig_instance.prototype = Object.prorotype = horse_instance.prototype なので、pig と horse は同じプロトタイプに由来し、instanceof はこれをチェックして TRUE を返します。

于 2013-08-09T12:58:38.777 に答える