ホームページ  >  記事  >  ウェブフロントエンド  >  厳密に言えば、JavaScript にはクラスがありません

厳密に言えば、JavaScript にはクラスがありません

WBOY
WBOYオリジナル
2023-05-20 22:36:08569ブラウズ

JavaScript の人気と広範な使用に伴い、ますます多くの開発者が JavaScript プログラミング言語のいくつかの機能と制限に注目し始めています。その 1 つは、クラスという概念があるかどうかであり、これはよく議論されている問題です。この記事では、JavaScript クラスの本質を理解するために、このトピックをさらに深く掘り下げていきます。

JavaScript は、JavaScript の中核機能であるクロージャ、高階関数、プロトタイプ継承などの強力な機能を備えた、非常に柔軟なプログラミング言語です。他のプログラミング言語とは異なり、JavaScript はさまざまなパラダイムにおいて非常に複雑です。JavaScript は厳密なオブジェクト指向言語ですか?

多くの開発者にとって、クラスは多くのオブジェクト指向プログラミング言語の鍵となります。基本概念。 Python、C#、Java などの言語には、プロパティ、メソッドを定義し、新しいインスタンスを作成できるクラスがあります。クラスを使用すると、プログラマがコードをモジュール、抽象化、再利用に分割できるため、コードの再利用性と拡張性という利点が得られます。しかし、JavaScript について話すとき、厳密に言えばクラスなどというものは存在しません。

クラスとは何ですか?

この問題をよりよく理解するには、まずクラスとは何かを理解する必要があります。クラスは、オブジェクト モデルと、オブジェクトの特性 (プロパティ) と動作 (メソッド) を記述することができる特別なデータ構造の表現です。

クラス階層では、上位の親クラスでいくつかの共通のプロパティとメソッドが定義され、これらの共通のプロパティとメソッドはサブクラスで継承して使用できます。サブクラスは、これらのプロパティとメソッドを再定義または継承したり、独自のプロパティとメソッドを追加したりできます。

たとえば、次は Java で書かれたクラスの例です:

public class Person{
  private String name;
  private int age;
  
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  
  public String getName() {
    return this.name;
  }
  
  public int getAge() {
    return this.age;
  }
  
  public void sayHello() {
    System.out.println("Hello, my name is " + this.name);
  }
}

この例では、名前と年齢という 2 つの属性と 2 つのメソッドを含む Person クラスを定義します。 getName() と getAge()。また、 Person インスタンスの名前をコンソールに出力する SayHello() メソッドもあります。

JavaScript のオブジェクト

JavaScript が包括的なオブジェクト指向言語であると考える人もいるかもしれませんが、それは誤解です。 JavaScript はクラスに似た構文構造を使用しますが、実際のオブジェクト モデルはプロトタイプに基づいています。

JavaScript では、オブジェクトは JavaScript 関数に基づいて実行時に作成されます。明示的なクラス定義はありませんが、コンストラクターを使用して新しいオブジェクトを作成します。コンストラクター内では、オブジェクトの基本定義としてオブジェクトの初期プロパティとメソッドを定義できます。

たとえば、次の例は、JavaScript コンストラクターによって定義された Person オブジェクトです。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.getName = function() {
  return this.name;
};

Person.prototype.getAge = function() {
  return this.age;
};

Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
};

ご覧のとおり、コンストラクターに基づく Person オブジェクトは JavaScript で作成されます。この関数では、名前と年齢のプロパティを設定し、「this」キーワードを使用して新しく作成されたオブジェクトにそれらを割り当てます。次に、Person.prototype オブジェクトを使用して、新しく作成した Person に対して 3 つのメソッドを定義します。

プロトタイプ継承

JavaScript では、継承は従来とは異なる方法であり、プロトタイプ継承を使用して実装されます。すべての JavaScript オブジェクトにはプロトタイプ オブジェクトがあるため、プロトタイプの継承が実装されます。

すべての JavaScript オブジェクトには、オブジェクトのプロパティとメソッドを含むプロトタイプ オブジェクトがあります。新しいオブジェクトを作成するとき、その元のプロトタイプは空であり、コンストラクターのプロトタイプからメンバーを継承します。他のオブジェクトは引き続き独自のプロパティとメソッドを定義できます。

たとえば、次のコードは、プロトタイプ継承を通じて、作成されたオブジェクトに新しいプロパティとメソッドを追加する方法を示しています。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.getName = function() {
  return this.name;
};

Person.prototype.getAge = function() {
  return this.age;
};

Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
};

Person.prototype.setAge = function(newAge) {
  this.age = newAge;
};

この例では、setAge() メソッドという名前のオブジェクトを追加し、それを Person プロトタイプ オブジェクトに追加します。このメソッドを使用して、人物オブジェクトの新しい年齢を設定できるようになりました。

結論

厳密に言えば、JavaScript にはクラスがありませんが、これは JavaScript の特殊な設計によるものです。 JavaScript では、オブジェクトはプロトタイプ変数に基づいて作成され、プロトタイプ継承を使用してオブジェクト間の継承関係が実装されます。その結果、JavaScript は非常に柔軟なプログラミング モデルを提供し、プログラマーがさまざまな関数でさまざまなプログラミング パラダイムを実装できるようになります。

JavaScript オブジェクト指向プログラミングの中核となる概念はクラスではなくオブジェクトです。したがって、複雑な JavaScript アプリケーションを実装する場合は、JavaScript のプロトタイプ継承メカニズムを理解し、オブジェクトを作成および継承する方法のスキルを習得する必要があります。これは効率的な JavaScript コードを作成するための鍵です。

以上が厳密に言えば、JavaScript にはクラスがありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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