JavaScriptはオブジェクト指向プログラミング言語(OOP)ですが、C++やJavaなどの通常のオブジェクト指向言語とは異なります。たとえば、JavaScriptにはクラスの概念がありません。そのため、OOP の考え方に従って JavaScript コードを記述すると、常に少し不自然に感じられます。
実際、JavaScript はオブジェクトベースの言語です。JavaScript のほとんどすべてがオブジェクトであると考えることができます。前のチュートリアルと例では、オブジェクトの概念についてほとんど言及していませんでしたが、この章を学習すると、オブジェクトが実際にオブジェクトに基づいていることがわかります。
オブジェクトとは何ですか?
オブジェクトはプロパティとメソッドのコレクションです。オブジェクトとは何か、およびオブジェクトに関連するいくつかの概念を理解するのに役立つ簡単な例を使用してみましょう。たとえば、人がオブジェクトである場合:
属性とメソッド: 人には名前、身長、体重、その他の特性があります。これらの特性はオブジェクトの属性と呼ばれます。人は話したり歩いたりすることができます。この能力をオブジェクトのメソッドと呼びます。
プライベート メソッドとパブリック メソッド: 人はプログラミング言語を学べばプログラムを書くことができ、外国語を学べば翻訳者になれます。個々のオブジェクトのみが持つこの能力は、オブジェクトのプライベート メソッドと呼ばれます。逆に、話す、歩くなど誰もが持っている上記のメソッドをオブジェクトのパブリックメソッドと呼びます。
カプセル化: プログラミング言語を学んだ同じ 2 人がプログラムを作成できますが、2 つは異なるオブジェクトであるため、プログラムの作成方法に違いが生じることがよくあります。オブジェクトの一部のデータとコードはプライベートにすることができ、外部からアクセスできなくなります。これをカプセル化と呼びます。
継承: 継承はクラス内の概念です。継承とは、サブクラスが親クラスから継承(拡張)することで、親クラスのプロパティやメソッド(プライベートなプロパティやメソッドを除く)を取得することを意味します。これは大きなツリーのようなもので、継承を通じて層ごとに構築され、最終的なプログラムが明確で強力になります。 JavaScript 言語にはクラスの概念がないため、継承機能は直接提供されません。しかし、現在、多くの人々と一部の JavaScript フレームワークが JavaScript に継承機能を与えようとしています。
ポリモーフィズム: ポリモーフィズムとは、異なるものが異なる現れ方をする能力を指します。ポリモーフィズム メカニズムにより、異なる内部構造を持つオブジェクトが同じ外部インターフェイスを共有できるようになり、コードの複雑さが軽減されます。残念ながら、JavaScript は継承と同様に、OOP の非常に重要な概念であるポリモーフィズムをサポートしていません。もちろん、JavaScript で間接的にポリモーフィズムを実装しようとしている人や JavaScript フレームワークもたくさんあります。
このチュートリアルの長さと目的を考慮して、オブジェクトに関するいくつかの基本概念をここで簡単に説明します。オブジェクト指向プログラミングは専門科目です。興味のある学生は、OOP に関する他の専門書籍を読むことができます。
オブジェクトのプロパティへのアクセス
プロパティは、オブジェクトに関連付けられた値です。
オブジェクトのプロパティにアクセスするための構文は次のとおりです:
objectName.propertyName
この例では、String オブジェクトの長さプロパティを使用して文字列の長さを取得します。
var message="Hello World!";
var x=message.length;
上記のコードが実行された後、 の値はオブジェクトに対して実行できるアクションです。
次の構文でメソッドを呼び出すことができます:
objectName.methodName()この例では、String オブジェクトの toUpperCase() メソッドを使用してテキストを大文字に変換します:
var message="Hello world ! ";var x=message.toUpperCase();
上記のコードが実行されると、x の値は次のようになります:
HELLO WORLD!
関数を使用してオブジェクトを構築します: <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(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 オブジェクトにプロパティを追加する
オブジェクトに値を割り当てることで、既存のオブジェクトに新しいプロパティを追加できます:
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中文网(php.cn)</title> <script> // 定义构造函数,并设定一个属性 function Person(name) { this.name = name; } // 为 Person 增加一个方法 Person.prototype.showName = function() { alert("我叫" + this.name); }; // new 关键字实例化一个对象 var Tom = new Person("Tom"); // 运行该对象内的 showName() 方法 Tom.showName(); </script> </head> <body> </body> </html>上記の例に示すように、コンストラクターでオブジェクト名属性を設定し、オブジェクトのプロトタイプ属性を通じて showName() メソッドを追加し、最後に new キーワードを通じてオブジェクトをインスタンス化します。
JavaScript クラス
JavaScript はオブジェクト指向言語ですが、JavaScript はクラスを使用しません。
JavaScript では、クラスは作成されず、(他のオブジェクト指向言語のように) クラスからオブジェクトが作成されることもありません。
JavaScript はクラスベースではなく、プロトタイプベースです。
JavaScript for...in ループ
JavaScript for...in ステートメントは、オブジェクトのプロパティをループします。
構文
for (オブジェクト内の変数){コード実行...}
注: for...in ループ内のコード ブロックは、属性ごとに 1 回実行されます。
りー