DouglasCrockford
www.crockford.com
And you think you're so clever and classless and free
--John Lennon
JavaScript一种没有类的,面向对象的语言,它使用原型继承来代替类继承。这个可能对受过传统的面向对象语言(如C++和Java)训练的程序员来说有点迷惑。JavaScript的原型继承比类继承有更强大的表现力,现在就让我们来看看。
Java |
JavaScript |
---|---|
强类型 |
弱类型 |
静态 |
动态 |
基于类 |
基于原型 |
类 |
函数 |
构造器 |
函数 |
方法 |
函数 |
まず最初に、なぜ私たちは継承をそれほど気にするのでしょうか?主な理由は 2 つあります。 1つ目はタイプ有利です。私たちは、言語システムが同様の型参照変換キャストを自動的に実行できることを望んでいます。小規模な型安全性は、プログラムがオブジェクト参照を明示的に変換することを必要とする型システムから得ることができます。これは強く型付けされた言語の最も重要な点ですが、クラス参照にキャストが必要ない JavaScript のような弱い型付け言語とは何の関係もありません。
2 番目の理由は、コードの再利用です。プログラムでは、多くのオブジェクトが同じメソッドを実装していることがよくあります。クラスを使用すると、単一の定義セットを使用してオブジェクトを作成できます。オブジェクトが他のオブジェクトに含まれるオブジェクトを含むこともよくありますが、違いは少数のメソッドの追加または変更のみです。これにはクラスの継承が非常に便利ですが、プロトタイプの継承はさらに便利です。
これを実証するために、通常のクラス言語のようにコードを記述できるようにする小さな「スイートスポット」を紹介します。次に、クラス言語にはない便利なパターンをいくつか示します。最後に、これらの「デザート」について説明します。
クラス継承
まず、Parenizor クラスを作成します。このクラスには、メンバー値の get メソッドと set メソッド、および値を括弧で囲む toString メソッドがあります。