オブジェクト指向言語には、継承、ポリモーフィズム、カプセル化の 3 つの主要な特徴があります。JavaScript はこれら 3 つの点に対する自然な構文の実装を提供しませんが、プロトタイプなどの技術を通じてこれらをすべて実現できるため、この記述はそうではないようです。過剰な。
JavaScript では、オブジェクトを構築する方法が 3 つあります。
1. まず、JavaScript が弱い型付け言語であるという事実を明確にする必要があります。一方、JavaScript はオブジェクトに任意のプロパティとメソッドを追加できます。これに基づいて、次のようなコードを書くことができます:
これは C# 3.0 で提案したものと非常に似ていますか匿名オブジェクトについてはどうですか?
コードをコピー
コードは次のとおりです。 protected void Page_Load(object sender, EventArgs e ) {
var person = new
{
name = "フェイ リンシャ",
年齢 = 21
};
Response.Write("私の名前は " person .name ".I'm " person.age);
}
違いは、JavaScript では関数は型なので変数に代入できますが、C# ではできません。
しかし、上記の 2 つのメソッドでは、オブジェクトを個別に定義していることがわかります。次に、それらをクラスに抽象化しましょう。
コードをコピー
コードは次のとおりです:
しかし、ここでは属性がハードコーディングされており、各オブジェクトを個別にカスタマイズする方法がないことがわかります。
コードをコピーします
コードは次のとおりです。
コードは次のとおりです:
このコードには問題ありません。まず、トラバーサルを使用して、人物のすべてのキー (属性とメソッド名) を見つけます。次に、インデックスを使用して person オブジェクトの name 属性にアクセスします。
これらには問題はありませんが、従来のオブジェクト指向言語の観点から見ると、name と age はプライベート変数に属しているはずですが、この単純なアクセスでは person が破棄されてしまうのでしょうか?
前の記事で述べたことを覚えていますか? var が付くものは変数と呼ばれ、var がつかないものは属性と呼ばれます。したがって、コードを次のように変更するとします。
これは、JavaScript でのカプセル化の方法でもあります。
JavaScript のクラスとオブジェクトについてはこれで終わりですが、ここにはまだ問題がいくつかあります。それについては後述します。