2009-07-08 1 views
15

最近、Prototypeを使用してWebアプリケーションを構築し、Class.Create()機能をかなり使いました。今、私たちはjQueryへの移行を検討しています。これは「より良い」ライブラリと見なされているようです。私はそのトピックについていくつかの読書をしてきましたが、jQueryにPrototypeのようなクラス作成のための直接的な組み込みサポートがないことがわかりました。もちろん、.prototypeとjQuery.extend(https://stackoverflow.com/questions/79477/how-to-create-an-object-oriented-class-in-jqueryで言及されています)がありますが、さらに検索した後、jQueryが実際にこのようにスクリプトしたいとは思わないと感じています。なぜjQueryは正規のOOPの使用を妨げているようですか?

同じページに、John ResigのClassyプラグインに言及した記事があります。しかし、実際にはApril Fools Dayの冗談だと書かれていて、実際にコードを使用しないように指示しています。私は喜んで喜んでいますが、私はこのすべての理由が何であるかを理解したいと思います。もちろん、彼らはあなたが代わりにやりたいことは何ですか?誰かが私を啓発することはできますか?面白い答えを

-edit-

感謝。わかりやすくするために、これは、私がPrototypeで作ったクラスをjQueryのクラスを 'シェーピング'する方法に書き直し、これまでと同じ方法でそれらを使用することは可能ですか?それとも、これはまだ悪い習慣とみなされていますか?私は別のアプローチを使用すべきですか? 「オブジェクト指向のjavascript」のための

+4

あなたの情報についてJavaScriptはクラスベースの言語ではありません。プロトタイプベースの言語です。 – rahul

+0

...そしてLispとCよりも似ています:http://javascript.crockford.com/javascript.html – Boldewyn

+0

(4年の長所を持っている人から違いを見て)この[記事] http://jqueryvsmootools.com/)はMootoolsとJQueryについて、Mootoolsの背後にある推論は本質的にPrototypeJSに適用されます。 [motto](http://jqueryvsmootools.com/#mottos)セクションには、それがすべて記載されています。 TL; DR; JQueryはDOM操作用に設計されていますが、Mootool(とPrototype)はプロトタイプベース言語などでDOM **や**クラスのOOPなどの追加ユーティリティを使用して設計されています。 – OnesimusUnbound

答えて

11

まず安っぽいGoogle検索では、これを上がって...それは私が全体で取得したいポイントを説明します

JavaScript Object-Oriented Programming

ただ、最初の段落を見て、あなた検索:

JavaScriptは完全なオブジェクト指向プログラミング言語ではありません。 JSでのクラスの使用は、プロトタイプの機能に基づいています。 Prototypeライブラリは、プロトタイプ機能の使用をマスクしてクラスを作成します。 jQueryは、通常のJSを使用してjQuery自体を拡張し、独自のカスタムオブジェクトを作成するのと同じ方法でプロトタイプ機能を使用することを期待しています。

+7

jQueryはJavaScriptを強化し、他の言語をシミュレートしません。 +1 – Boldewyn

+4

引用された段落は単に間違っています。 Javascriptはオブジェクト指向の完全なプログラミング言語です。それはクラスベースのOO言語ではありません。 Prototypeのデザイナーは、多くの人々をより快適にするためにクラスフを提供することを決めました(私が始めたときは私も含めて)。 Crockfordの "Javascript:The Good Parts"を読んで、これは間違いだと思っています。 –

+0

@コリン:正しい。そして、はい、完全な間違い。私は同じ理由でDojoを嫌いです。 –

1

PrototypeからjQueryに変換するのとまったく同じ問題がありましたが、Prototypeの意味ではそうではないようです。それでも、jQueryをコーディングすると、JSONに大きく依存していることに気付くでしょう。これは、あなたが得ることになる、疑似正式な最も近いものです。

jQuery UIの中には、実際に渡すパラメータのすべてのプロパティを繰り返し処理するものがあります。つまり、Object.prototypeを実行することはできませんすべてのオブジェクトに対して、jQuery UIは関連するパラメータとして扱おうとします。

スピードと拡張性は、しかし、驚くべきことですので、私はあなたがプロトタイプを乗り越える前に、それは時間の問題だと言う、とジャスティンの回答は、実際に有効なポイントになるという事実と用語をcometoだろう:)

0

jQueryのは簡単 が組み込まれていませんプロトタイプのようなクラスを作成 のサポートは

を行います。クラスの作成は、ライブラリではなくプログラマに委ねるのが最も良い方法です。私はプロトタイプのライブラリから始め、遠ざかりました。なぜなら、それは非常に肥大していたからです。 JavaScriptのOOPは全く難しくありません。プロトタイプの使い方を知っている限り、大丈夫です。

PrototypeのClass.createを扱う場合、JavaScriptでプライベートメンバーに相当するものを作成するのは難しい問題になります。そして、正直なところ、私はClass.createがあなたに何か有用であるとは思っていません。あなた自身やjQueryを使って簡単に行うことはできません。

移行を支援するために、両方のライブラリを同時に使用することができます。 jQueryはnoConflictの機能を持っていて、$関数を元の所有者に返します。

関連する問題