ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript でのオブジェクト指向設計

JavaScript でのオブジェクト指向設計

高洛峰
高洛峰オリジナル
2016-11-26 11:29:49998ブラウズ

W3C School の定義によれば、JavaScript はクラスはありませんが、宣言はなく、各オブジェクトを直接使用するだけであることがわかります。キー - 値の組み合わせとして理解できます。

W3C School からの説明を添付します:
オブジェクト指向言語の要件
オブジェクト指向言語は、開発者に 4 つの基本機能を提供する必要があります:
カプセル化 - 関連情報 (データまたはメソッド) を格納する オブジェクト内の機能
集約 - 1 つのオブジェクトを別のオブジェクト内に格納する機能
継承 - クラスのプロパティとメソッドを別のクラス (または複数のクラス) から派生する機能
ポリモーフィズム -複数の方法で使用できるプログラムを作成する機能 メソッド 関数またはメソッド
ECMAScript を実行する機能は、これらの要件をサポートしているため、オブジェクト指向であると考えることができます。


以下は比較的規則的なオブジェクト定義です (以下の例は <> を参照しています):
var person = new Object();
person.name = "Horky";
person。年齢 = 40;
person.job = "ソフトウェア エンジニア";

person.sayName = function(){
document.write(this.name);
}

呼び出しメソッド:
person.sayName(); document.write("

年齢: ");

document.write(person.age);


document.write("

職業: ");
document.write (person ["ジョブ"]);

そうですね、すべてのプロパティはパブリックであり、プロパティにアクセスするには 2 つの異なる方法があります (アクセシビリティの制限はプロパティの属性によって決定できます)。)

もう 1 つ。方法はよりカジュアルで、Key-Value を定義するところまでですが、ブラウザの古いバージョンではサポートされていない可能性があります:

var person = (

名前: "Horky"、
年齢: 40、
職業: "ソフトウェア エンジニア"、

sayName:function(){

document.write(this.name);

}
};

JavaScriptの変数の性質は緩い型なので、はっきり言ってアナーキーな型なので、使わなくても大丈夫です。最初に完全な定義を与えるためですが、次のようにすることもできます (表示には必須ですが、決して推奨されません):

var person = new Object();


person.name = "Horky";

person. ()

{
document.write(this.name);
}

person.sayName();

person.age = 40;

document.write("

Age: ") ;
document .write(person.age);
person.job = "ソフトウェア エンジニア";
document.write("

Job: ");
document.write(person["job"]) ;

最初の文を次のように変更すると機能しません:

var person; または var person = "Unknown";

その理由は、基本的なデータ型と参照型が依然として Javascript で明確に定義されているためです。 .

JavaScript には前述したオブジェクト指向の機能があることを思い出してください。言うまでもなく、最初の 2 つの点はより明白であり、3 番目の点については後で説明します。個人的には、これは C++ の C の /Variable パラメーター関数に似ていると思います。つまり、関数のパラメーターは非常に任意であり、JavaScript では制限できないからです。すべては開発者に委ねられます。その結果、ポリモーフィズムが作成されます。コンストラクターを組み合わせて例を示します。 .age = 0;

this.job = "言いにくい! ";


switch(arguments.length)
{
case 3:
this.job = job;
case 2:

this.age = age;

case 1:
this.name = name;
break;
}
this.introduceSelf = function()

{

document.write("

私の名前は: "+this.name);

document.write("

"+this.age+" 歳です!");

document.write("

そして、私の仕事は : "+this.job) ;
}
}

var horky = 新しい人("ホーキー ",40,"ソフトウェア エンジニア");
var arthas = 新しい人("アルサス",22);
var 誰も = 新しい人();

この関数 Person() はコンストラクター関数であり、渡されたさまざまなパラメーターに基づいてさまざまな初期化が実行されます。これは、オブジェクトが渡された場合の実装方法を示します。これはプロトタイプ継承のパターンです (<> 6.3.4 を参照)。

グローバル関数を追加します:

function object(o)
{
function F() {};

F.prototype = o;

return new F();

}

次に、次の 2 つの新しいオブジェクトを試してください:
var horky_alias = object(horky);
var arthas_alias = object(horky, {name:{value:"Arthas"}}); ちなみに、 horky をコピーするときの 2 番目のオブジェクトです。名前も変更されました

この特別なポインターの存在により、これがすべて可能になります。これは、特定の A へのポインターです。オブジェクトへのポインタであり、このオブジェクトには、flyweight の概念と同じように、すべてのインスタンスで共有できるプロパティとメソッドが含まれています。 JavaScript の継承について話しましょう。端的に言えば、サブオブジェクトを親にアクセスすることです。重要な点が 2 つあります。子オブジェクトには、プロトタイプである親オブジェクトのインスタンスが必要です。したがって、典型的な子オブジェクトは次のように定義されます。 = "男性";

this.prototype = 新しい人(名前,年齢,仕事);

this.introduceSelf = function()


{

this.prototype.introduceSelf();

document.write("< ; p /> I am BOY!");
}
}

varboy = new Boy("A",3);

プロトタイプの使用が低レベルすぎて少し荒っぽいと感じる場合は、次のようにすることができます。それも行います。より単純な継承を実現するには、「借用コンストラクター」メソッドを使用します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。