私はJavaScriptのプロトタイプ継承をかなりよく理解していますが、完璧だとは言いません。私はJavaScriptの継承のための最新のプロトタイプの構文を見ていますが、これまではかなり良い意味合いがあります。JavaScript ES5のプロトタイプ継承でサロゲートクラスが必要なのはなぜですか?
__proto__
は、親関数のprototype
を検索するために使用されます。私がCat
とMammal
を持っていると言うと、私は単純にCat.prototype.__proto__
をMammal.prototype
と指し示すことができます。
ChildClass.prototype.__proto__ = ParentClass.prototype;
ChildClass.prototype.constructor = ChildClass;
__proto__
の使用それはごく最近まで、標準化されていなかったので、強くお勧めしました。このように、現代の標準化された練習はChildClassのプロトタイプを変更することも変更されますので、今度は、ES5の代理アプローチで
function Surrogate() {};
Surrogate.prototype = ParentClass.prototype;
ChildClass.prototype = new Surrogate();
ChildClass.prototype.constructor = ChildClass;
を見てみましょう、
ChildClass.prototype = ParentClass.prototype;
は、悪いですObject.create
ChildClass.prototype = Object.create(ParentClass.prototype);
ChildClass.prototype.constructor = ChildClass;
を使用することですParentClassのプロトタイプ
しかし、なぜこれを行うことはできませんか?
なぜサロゲートが必要ですか?
あなたの「ES5のサロゲートアプローチ」は完全に正確ではないと私は思います。 2011年に 'Object.create'が' 5.1'に追加されたので、現代JSが行くまでは非常に長い時間がかかりました。 – loganfsmyth
'new'が使用されました*前に* ES5は' Object.create'を導入しました。 – Bergi