この記事では、JSのプロトタイプの使用について説明します。参照のためにそれを共有してください。特定の分析は次のとおりです。
JSの写真型はJSの難しい部分です
この記事は、次の知識ポイントに基づいています。
1プロトタイプ設計モード
.netでは、clone()を使用してプロトタイプメソッドを実装できます
プロトタイプ法の主なアイデアは、クラスAが現在あるということです。クラスBを作成したいと考えています。このクラスはAによってプロトタイプ化され、拡張できます。 BのプロトタイプAと呼びます。
2 JavaScriptメソッドは、3つのカテゴリに分類できます。
クラスAメソッド
bオブジェクトメソッド
Cプロトタイプ法
例は次のとおりです。
function people(name){this.name = name; //オブジェクトメソッドthis.introduce = function(){alert( "私の名前は"+this.name); }} // class method people.run = function(){alert( "i con run");} // prototype method people.prototype.introducechinese = function(){alert( "my name is"+this.name);} // test var p1 = new people( "windking"); p1.introduce(); people.run(); p1.introducechinese();3 obj1.func.call(obj)メソッド
OBJをOBJ1と見なし、FUNCメソッドを呼び出すことを意味します
わかりました、次の問題は一つずつ解決されます:
プロトタイプとはどういう意味ですか?
JavaScriptの各オブジェクトには、プロトタイプ属性があります。 JavaScriptのオブジェクトのプロトタイプ属性の説明は、オブジェクト型プロトタイプへの参照を返すことです。
A.Prototype = new B();
プロトタイプを理解することは、相続と混同されるべきではありません。 Aのプロトタイプは、Bのインスタンスです。Aは、Bのすべての方法と特性をクローン化したことを理解できます。AはBの方法と特性を使用できます。ここで強調されているのは、相続ではなくクローニングです。これが起こる可能性があります:AのプロトタイプはBのインスタンスであり、BのプロトタイプはAのインスタンスでもあります。
実験の例を見てみましょう。
function baseclass(){this.showmsg = function(){alert( "baseclass :: showmsg"); }} function endoctclass(){} endoctclass.prototype = new baseclass(); var instance = new ExtendClass(); instance.showmsg(); // baseclass :: showmsgを表示します最初にBaseclassクラスを定義し、次にexterclassを定義したいと考えていますが、BaseclassのインスタンスをプロトタイプとしてClone Extendclassとして使用することを意図しています。
ExtendClass.Prototype = new BaseClass()は、次のように読むことができます。ExtendClassは、プロトタイプクローニングとしてベースクラスのインスタンスで作成されます。
次に、Extendclass自体にBaseclassメソッドと同じ名前のメソッドが含まれている場合、どうなるでしょうか?
拡張実験2は次のとおりです。
function baseclass(){this.showmsg = function(){alert( "baseclass :: showmsg"); }} function endoctclass(){this.showmsg = function(){alert( "endoctclass :: showmsg"); }} extendClass.Prototype = new BaseClass(); var instance = new ExtendClass(); instance.showmsg(); // show endexclass :: showmsg実験的証拠:関数が実行されているとき、最初にオントロジーの関数に移動して検索します。見つかった場合、実行されます。発見されていない場合は、機能を検索するためにプロトタイプに移動します。または、プロトタイプが同じ名前の関数をクローンしないことを理解することができます。
次に、別の新しい質問があります。
extendclassインスタンスのインスタンスを使用して、baseclass 'objectメソッドshowmsgを呼び出す場合はどうなりますか?
答えは、コールを使用することです。
ExtendClass.prototype = new BaseClass(); var instance = new ExtendClass(); var baseInstance = new BaseClass(); baseInstance.showmsg.call(instance); // show baseclass :: showmsgg
ここでbaseinstance.showmsg.call(instance); 「baseInstanceとしてインスタンスを呼び出し、そのオブジェクトメソッドshowmsgを呼び出す」
OK、誰かがここで尋ねるかもしれません。なぜbaseclass.showmsg.call(instance);
これは、オブジェクトメソッドとクラスメソッドの違いです。私たちが呼びたいのは、Baseclassのオブジェクト方法です
最後に、次のコードが明確に理解されている場合、この記事にあることがすでに理解されています。
<script type = "text/javascript"> function baseclass(){this.showmsg = function(){alert( "baseclass :: showmsg"); } this.baseshowmsg = function(){alert( "baseclass :: baseshowmsg"); }} baseclass.showmsg = function(){alert( "baseclass :: showmsg static");} function endoctclass(){this.showmsg = function(){alert( "endoctclass :: showmsg"); }} endoctclass.showmsg = function(){alert( "endocclass :: showmsg static")} extendclass.prototype = new baseclass(); var instance = new Extendclass(); instance.showmsg(); // extendclass :: showmsginstance.baseshowmsg()を表示// baseclass :: baseshowmsginstance.showmsg()を表示します。 // extendclass :: showmsgbaseclass.showmsg.call(instance);を表示します。 // baseclass :: showmsg staticvar baseinstance = new baseclass(); baseinstance.showmsg.call(instance); // show baseclass :: showmsg </script>この記事がみんなのJavaScriptプログラミングに役立つことを願っています。