extend
これは、 Pro Javascript Design Patterns、Apress、2008、p.44での定義です。
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
ラインについてはsubClass.superclass = superClass.prototype;
、そうしても同じだと思います。将来的には、とにかくsubClass.superclass = superClass
いつでもプロトタイプにたどり着くことができるからです。subClass.superclass.prototype
しかし、コンストラクター関数を指すのではなく、プロトタイプを指すのはなぜだと思いましたか?しかし、これは小さな質問です。
より重要な質問は、なぜ最後の行がオブジェクトのプロトタイプのコンストラクターを自分自身に戻そうとするのかということです。私はFirefoxとChromeでそれを試しました、そして彼らはいつもすでにそのように指しています。
また、少し奇妙なのは、なぜそれを使用するのif(superClass.prototype.constructor == Object.prototype.constructor)
ですか?if (superClass === Object)
代わりに使用しないのはなぜですか?