JavaScriptでは、プロトタイプを使用して継承を実現できます。
例えば
function baz(){this.oo = "";} function foo(){} foo.prototype = new baz(); var myfoo = new foo(); myfoo.oo;このようにして、BAZの属性OOにアクセスできます。これは、プロトタイプの共有特性のために実際の使用では不可能です(データはヒープに保存されます)、
すべてのインスタンスはプロトタイプを使用しますが、BAZ属性に参照タイプがあると、悲劇的になります。 1つのインスタンスが変更された場合、もう1つのインスタンスも変更されます... Wuwuwu
当然、組み合わせ継承があります
function baz(){this.oo = "";} baz.prototype.xx = function(){} function foo(){baz.call(this); // 2番目の呼び出し} prototype = new baz(); //最初の通話var myfoo = new foo(); myfoo.oo; myfoo.xxこれには問題があり、コードはBAZが2回呼び出されることも示しています。おとめ座はどのように許可できますか?
文を追加する場合、2番目の方法は最初の方法で問題を抱える必要はありませんか?答えはノーです。
その理由は、属性の検索がオブジェクト自体から始まるからです。発見されていない場合にのみ、プロトタイプで見つかります。呼び出すとき、属性は継承されます。
別の文を追加させてください。そうすれば、このようなコール継承を使用するだけで十分ではありませんか?プロトタイプを使用しない場合、これは実行可能ですが、プロトタイプをおとめ座として使用できないのはどうすればよいですか?
この方法はプロトタイプで共有されるため、パフォーマンスがはるかに優れています。
寄生的な組み合わせ継承
__extends = function(p、c){function ctor(){this.constructor = c; // assontment constructor} ctor.prototype = p.prototype; c.prototype = new ctor();} function baz(){this.oo = [1];} baz.xxx = functions() foo(){baz.call(this);} var myfoo = new foo(); myfoo.oo; myfoo.xx;これは、2つの呼び出しの問題を解決するだけでなく、オブジェクトがコンストラクターを呼び出す場合、プロトタイプチェーン上の他のコンストラクターの代わりにオブジェクトを作成する実際の関数が呼び出されるという問題を解決します。
コードには声明があります。
コンストラクターは、プロトタイプオブジェクトの属性であり、オブジェクトの作成者です。プロトタイプの属性は再割り当てされるため、コンストラクターは継承されます。
ここでは、オブジェクトの作成方法、つまり新しいことが何をしたかについてお話したいと思います。
例えば:
var a = new b();
実際、それはこのような、a = {}; aのaを作成し、次にb.call(a)を作成します。呼び出し初期化a。コールの前に別のステップがあります。これは、aの内部プロトタイプオブジェクトです。
プロトタイププロパティがBポイントに設定されるプロトタイプオブジェクト。オブジェクト割り当てメモリコントロールを作成するために使用されるプロトタイプにはコンストラクター属性があります。
それはおそらくすべてです...それはまだ遅れています、それを壊しましょう。落ち着いた心を維持し、焦りを抱かないでください。明日を変えるために一生懸命働き、すべてが徐々に良くなることを願っています。
上記は、編集者がJavaScriptの継承(必須読み取り)の包括的な理解について編集者がもたらすすべてのコンテンツです。みんなが足跡の家をもっとサポートすることを願っています。