JavaScript オブジェクト
JavaScriptはオブジェクト指向プログラミング言語(yǔ)(OOP)ですが、C++やJavaなどの通常のオブジェクト指向言語(yǔ)とは異なります。たとえば、JavaScriptにはクラスの概念がありません。そのため、OOP の考え方に従って JavaScript コードを記述すると、常に少し不自然に感じられます。
実際、JavaScript はオブジェクトベースの言語(yǔ)です。JavaScript のほとんどすべてがオブジェクトであると考えることができます。前のチュートリアルと例では、オブジェクトの概念についてほとんど言及していませんでしたが、この章を?qū)W習(xí)すると、オブジェクトが実際にオブジェクトに基づいていることがわかります。
オブジェクトとは何ですか?
オブジェクトはプロパティとメソッドのコレクションです。オブジェクトとは何か、およびオブジェクトに関連するいくつかの概念を理解するのに役立つ簡(jiǎn)単な例を使用してみましょう。たとえば、人がオブジェクトである場(chǎng)合:
屬性とメソッド: 人には名前、身長(zhǎng)、體重、その他の特性があります。これらの特性はオブジェクトの屬性と呼ばれます。人は話(huà)したり歩いたりすることができます。この能力をオブジェクトのメソッドと呼びます。
プライベート メソッドとパブリック メソッド: 人はプログラミング言語(yǔ)を?qū)Wべばプログラムを書(shū)くことができ、外國(guó)語(yǔ)を?qū)Wべば翻訳者になれます。個(gè)々のオブジェクトのみが持つこの能力は、オブジェクトのプライベート メソッドと呼ばれます。逆に、話(huà)す、歩くなど誰(shuí)もが持っている上記のメソッドをオブジェクトのパブリックメソッドと呼びます。
カプセル化: プログラミング言語(yǔ)を?qū)Wんだ同じ 2 人がプログラムを作成できますが、2 つは異なるオブジェクトであるため、プログラムの作成方法に違いが生じることがよくあります。オブジェクトの一部のデータとコードはプライベートにすることができ、外部からアクセスできなくなります。これをカプセル化と呼びます。
継承: 継承はクラス內(nèi)の概念です。継承とは、サブクラスが親クラスから継承(拡張)することで、親クラスのプロパティやメソッド(プライベートなプロパティやメソッドを除く)を取得することを意味します。これは大きなツリーのようなもので、継承を通じて層ごとに構(gòu)築され、最終的なプログラムが明確で強(qiáng)力になります。 JavaScript 言語(yǔ)にはクラスの概念がないため、継承機(jī)能は直接提供されません。しかし、現(xiàn)在、多くの人々と一部の JavaScript フレームワークが JavaScript に継承機(jī)能を與えようとしています。
ポリモーフィズム: ポリモーフィズムとは、異なるものが異なる現(xiàn)れ方をする能力を指します。ポリモーフィズム メカニズムにより、異なる內(nèi)部構(gòu)造を持つオブジェクトが同じ外部インターフェイスを共有できるようになり、コードの複雑さが軽減されます。殘念ながら、JavaScript は継承と同様に、OOP の非常に重要な概念であるポリモーフィズムをサポートしていません。もちろん、JavaScript で間接的にポリモーフィズムを?qū)g裝しようとしている人や JavaScript フレームワークもたくさんあります。
このチュートリアルの長(zhǎng)さと目的を考慮して、オブジェクトに関するいくつかの基本概念をここで簡(jiǎn)単に説明します。オブジェクト指向プログラミングは専門(mén)科目です。興味のある學(xué)生は、OOP に関する他の専門(mén)書(shū)籍を読むことができます。
オブジェクトのプロパティへのアクセス
プロパティは、オブジェクトに関連付けられた値です。
オブジェクトのプロパティにアクセスするための構(gòu)文は次のとおりです:
objectName.propertyName
この例では、String オブジェクトの長(zhǎng)さプロパティを使用して文字列の長(zhǎng)さを取得します。
var message="Hello World!";
var x=message.length;
上記のコードが実行された後、 の値はオブジェクトに対して実行できるアクションです。
次の構(gòu)文でメソッドを呼び出すことができます:
objectName.methodName()この例では、String オブジェクトの toUpperCase() メソッドを使用してテキストを大文字に変換します:
var message="Hello world ! ";var x=message.toUpperCase();
上記のコードが実行されると、x の値は次のようになります:
HELLO WORLD!
関數(shù)を使用してオブジェクトを構(gòu)築します: <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</title>
</head>
<body>
<script>
function person(firstname,age){
this.firstname=firstname;
this.age=age;
}
myFather=new person("John",50);
document.write(myFather.firstname + " is " + myFather.age + " years old.");
</script>
</body>
</html>
オブジェクト コンストラクターを取得したら、次のように新しいオブジェクト インスタンスを作成できます:
var myFather=new person("John","Doe",50,"blue");var myMother =new person("Sally","Rally",48,"green");
JavaScript オブジェクトにプロパティを追加する
オブジェクトに値を割り當(dāng)てることで、既存のオブジェクトに新しいプロパティを追加できます:
personObj がすでに存在すると仮定します - 次の新しいプロパティをそれに追加できます: 名、姓、年齢、目の色:
person.firstname="John";person.lastname="Doe";person.age=30;
person.eyecolor="blue";
x=person.firstname;
T上記のコードが実行されると、x の値は次のようになります:
John
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> <script> // 定義構(gòu)造函數(shù),并設(shè)定一個(gè)屬性 function Person(name) { this.name = name; } // 為 Person 增加一個(gè)方法 Person.prototype.showName = function() { alert("我叫" + this.name); }; // new 關(guān)鍵字實(shí)例化一個(gè)對(duì)象 var Tom = new Person("Tom"); // 運(yùn)行該對(duì)象內(nèi)的 showName() 方法 Tom.showName(); </script> </head> <body> </body> </html>上記の例に示すように、コンストラクターでオブジェクト名屬性を設(shè)定し、オブジェクトのプロトタイプ屬性を通じて showName() メソッドを追加し、最後に new キーワードを通じてオブジェクトをインスタンス化します。
JavaScript クラス
JavaScript はオブジェクト指向言語(yǔ)ですが、JavaScript はクラスを使用しません。
JavaScript では、クラスは作成されず、(他のオブジェクト指向言語(yǔ)のように) クラスからオブジェクトが作成されることもありません。
JavaScript はクラスベースではなく、プロトタイプベースです。
JavaScript for...in ループ
JavaScript for...in ステートメントは、オブジェクトのプロパティをループします。
構(gòu)文
for (オブジェクト內(nèi)の変數(shù)){コード実行...}
注: for...in ループ內(nèi)のコード ブロックは、屬性ごとに 1 回実行されます。
りー