[戯言]
面接中にマネージャーから聞かれた質問の 1 つが、長い間考えても答えられなかったのでとても印象に残りました。問題は、JavaScript はどのように継承を実装するのかということです。 開発プロセスではオブジェクト指向が使用されているため、継承も最も基本的な部分です。私が JS を使い始めてからほぼ 2 年ですが、私にはこの基礎レベルさえも必要とされていないようです。強度が上がる! ! !改めて情報を確認して、ようやく深く理解できました。あまりにもナンセンスです、コーディングアクション...
[Text]
従来のクラス継承が C# では非常に単純であることは誰もが知っていますが、JS ではプロトタイプ継承が使用されているため、それほど単純ではありません。これは比較的複雑です。実装する。
//People オブジェクトを定義します
var People = function () { };
People.prototype = {
身長: 175,
歩行: function () {
alert("人々が歩いています..."); }
}
//Me オブジェクトを定義します
var Me = function () { }
//Me のプロトタイプ属性を People オブジェクトに設定します
Me.prototype = new People ();
//作成された Me オブジェクトの参照を Me に戻します
Me.prototype.constructor = Me;
//Height プロパティを変更します
Me.prototype.SetHeight = function ( v) {
Me.prototype.Height = v;
}
//新しい停止アクション
Me.prototype.Stop = function () {
alert("私は停止です。 ");
}
var m = new Me();
//結果は、 People are 175cm height.
alert("People are " m.Height "cm height.");
m.SetHeight(185 );
//結果は、私の身長は 185cm です。
alert("私は " m.Height "cm です。");結果は、人々は歩いています...
m.Walk(); //結果は、
m.Stop(); です。
//結果は、あなたの身長は 185cm です。
alert("You're " y.Height "cm height."); 上記からわかるように、たとえば、Me オブジェクトは People オブジェクトを継承し、People プロトタイプにアクセスできます。Me の属性とアクションは、Me 独自のアクションと属性を持つこともできます。上記の例では、y=new Me() がインスタンス化されていますが、その Height プロパティが表示されるとき、それは元の 175 ではなく、m インスタンスによって変更された 185 であることに注意することが重要です。新しい People 実装は作成されませんが、そのプロトタイプのインスタンスが再利用されます。したがって、上記の例では、すべての Me オブジェクトが同じ Height プロパティを共有することになります。継承を使用する場合は、これに特に注意する必要があります。