8

私の経験から、JavaScriptはこれを行います:

  • DOMまたは他のホストオブジェクトの操作
  • イベントハンドラーの追加
  • Ajaxを行う

プロトタイプの継承を掘り下げ始めたので、実際にどのように使用されているのか知りたいです。ユースケースは何ですか?

ここで遺伝パターンを積極的に使用している人はいますか?何のために?

(私の質問にはたくさんの答えがあることを理解しています-JavaScriptで継承を使用している感覚を得るためにそれらのいくつかを聞きたいだけです)

4

5 に答える 5

2

jQuery (およびそれ以前の JavaScript) を扱った経験から、プロトタイプの継承は期待していたほど有用ではありませんでした。用途はありますが、言語にとって根本的に重要ではありません。

Javascript でメソッドを使用してオブジェクトを返したい場合foo:

return { 
  foo: function() { 
    alert('You called foo!'); 
  }
};

そして呼び出し元は、そのようなオブジェクトをポリモーフィックとして扱うことができます。つまりfoo、オブジェクトの「タイプ」を気にせずに呼び出すことができます。継承の必要はありません。

このような背景に対して、プロトタイプは単なる最適化です。これらを使用すると、インスタンスごとに関数プロパティの大きなセットを複製することなく、多数のオブジェクトを作成できます。これが、jQuery が内部的に使用する理由です。jQuery オブジェクトには数十の関数があり、それらをすべてのインスタンスにコピーするのは大きなオーバーヘッドになる可能性があります。

しかし、jQuery のユーザーの観点からは、プロトタイプは特に重要ではありません。それらを使用しないように書き直すことができ、それでも機能します (ただし、より多くのメモリを使用する可能性があります)。

于 2010-09-14T10:57:15.377 に答える
1

Douglas Crockford には、さまざまな継承に関する興味深い記事があります。

http://javascript.crockford.com/inheritance.html

http://javascript.crockford.com/prototypal.html

http://javascript.crockford.com/private.html

最初のものは古く、そのように何かをしたくないかもしれませんが、JavaScript がいかに柔軟であるかを示しています。2 つ目は、プロトタイプの使用方法です。最後のものは、JavaScript でオブジェクトを多用する場合に興味深いものであり、継承について少し触れています。

それらを読んでも (短いので) 必要なすべての答えが得られるとは限りませんが、JavaScript について少し違った見方や見方をするようになると思います。そうは言っても、クロックフォードは常に自分の文章に非常に自信を持っていますが、彼の言葉を法として解釈すべきではないと思います.

于 2010-09-15T07:19:10.043 に答える
1

iOS、Android などを実行するモバイル デバイス専用に記述されるコードがますます増え、アプリ パラダイムが成熟するにつれて、デバイス上で実行される JavaScript ライブラリにより多くの複雑さとロジックを組み込む方向にシフトしています。

JavaScript のオブジェクト/継承モデルは、動的で複雑なアプリケーションを開発するための非常に柔軟なツールキットを開発者に提供します。

JavaScript 継承モデルを使用すると、次のことが可能になります。

  • オブジェクトのインスタンスが作成された後でも、コード内の任意の場所でプロトタイプ (オブジェクト定義) を拡張します。
  • プロトタイプのインスタンスを他のインスタンスとは別に拡張します。
  • すべての組み込みオブジェクトを新しい機能で拡張します。

これは、Ruby のクラスおよび mixin 機能に似ており、大量の新しい設計および継承パターンを可能にしますが、発明または文書化されているのはごくわずかです。

jquery は、成熟した JavaScript ライブラリの最良の例です。リンク テキスト プロトタイプと scriptaculus はその他です。

于 2010-09-14T10:44:45.827 に答える
0

おそらく、私が知っている JavaScript で使用されている継承の最も良い例は、Ext ライブラリです。Ext は、オブジェクト指向のパラダイムを適用するプログラムに見られる継承へのより典型的なアプローチを示しています。

Ext は、さまざまな方法で使用できる多くの構成可能なオブジェクトで構成されるライブラリです。ほとんどのオブジェクトは抽象クラスに一般化されています。それを見てください。

この機能は長い間存在していましたが、ajax とより厚いクライアント Web アプリケーションへの傾向により、通常は使用しているライブラリ内にパッケージ化されていますが、より一般的になっています。

私は以前にプロトタイプの継承で遊んだことがあり、フルタイムの仕事中にいくつかの仕事で控えめに使用していました。知っておくと便利で、理解しておくと便利ですが、私が日常的に使用しているケースはそれほど多くありません。

于 2010-10-05T19:15:27.427 に答える
0

jQuery などの大きなライブラリのコードを確認する必要があります。これは、これらのライブラリ内で非常に広く使用されています。

于 2010-09-13T19:15:02.460 に答える