JavaScript はオブジェクト指向クラスの関数記述スキルを実装します_js オブジェクト指向

WBOY
リリース: 2016-05-16 18:33:06
オリジナル
888 人が閲覧しました

Java、C#、VB を学習したことがある人ならクラスの概念を知っており、クラスには継承、カプセル化、ポリモーフィズムなどの機能があります。 JavaScript はオブジェクト指向言語ではなく、インタプリタ型言語です。
しかし、JavaScript を使用して継承とポリモーフィズムを実装することもできます。
JavaScript 実装クラスには多くのメソッドがあります。
方法 1: 構築方法。
コード

コードをコピー コードは次のとおりです。

function coder(){
this.name = 'Xiao Wang';
this.job = 'プログラマー';
this.coding = function ()
{
alert('コードを書いています');
}
}
var coder=new coder();
alert(coder.name);

方法 2:ファクトリーメソッド。
コード

コードをコピー コードは次のとおりです。
function createCoderFactory(){
var obj=new Object();
obj.name = 'Xiao Wang';
obj.coding = function (){
alert( 'コードを書く');
return obj;
alert(coder.name); ;


しかし、ファクトリ メソッドとコンストラクター メソッドの両方には、インスタンスが作成されるたびにクラスのすべての関数がインスタンス化されるという同じ欠点があります。
方法 3: プロトタイプチェーン。
コード



コードをコピー

コードは次のとおりです。 function coder(){ } coder.prototype.name = 'Xiao Wang'; coder.prototype.job = 'プログラマー'; coder.prototype.coding = function(){
alert('私は書いていますコード' );
};
var coder();
coder.coding();


プロトタイプチェーンの欠点は、1 つのインスタンスが変更されると、他のインスタンスもそれに応じて変更されることです。 テストは次のとおりです。




コードをコピー


コードは次のとおりです。
var coder1 = new coder(); var coder2 = new coder(); alert(coder1.name); /*「Xiao Wang」を表示*/ coder2.name = 'Old Wang'; alert(coder1.name) ; /*これは「Xiao Wang」と表示されます。本によれば、「Lao Wang」と表示されるはずです*/ alert(coder2.name); /*これは「Lao Wang」と表示されます。
alert(coder1 .name); 本によると、「Lao Wang」と表示されるはずですが、ここでは「Xiao Wang」と表示されているため、本は間違っています。


方法 4: 混合方法。
上記の 3 つのタイプにはそれぞれ欠点があるため、それらを改善する必要があります。




コードをコピー


コードは次のとおりです。
function coder(){ this .name = 'Xiao Wang'; this.job = 'プログラマー'; coder.prototype.coding = function(){ alert('コードを書いています'); 🎜> };
方法 5: 動的オリジナル チェーン。
最初の 3 つの欠点を解決する別の方法があります。
コード




コードをコピー

コードは次のとおりです。


function coder(){
this.name = 'Xiao Wang'; this.job = 'プログラマー'; if (typeof(coder._init) == '未定義'){ this.coding = function ( ) { alert('コードを書いています'); this._init = true;

このメソッドはどうでしょうか? 初めて使用する場合、_init が初期化されていないため、次のコードが実行されてコーディング関数がインスタンス化されます。今後再び実行されることはないため、関数は 1 回だけインスタンス化されます。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート