返信が遅くなりましたが、あなたのコメントに基づいて、私は間違いなくこのためのクラスを作成します。
要素の拡張は、要素インスタンスに関連する関数を実行する場合に役立ちます。通常、少なくともPrototypeが提供するものでは、これらには、属性値の変更、domへの追加/削除など、より実用的な性質があります。
アコーディオンに必要なすべてのロジックを網羅できる要素メソッドを実際に想像することはできません。同じページに複数のアコーディオンを配置できるようにしたいとおっしゃいましたが、要素メソッドである必要はありません。アコーディオンクラスを定義し、それを使用するスポットごとにインスタンス化できます。
アコーディオンクラスでは1つのコンテナdivが必要であり、すべての開閉タブ(またはそれらを定義したい)は直系の子孫であるとします。マークアップは次のようになります。
<div id="accordion1">
<div class="slide"><!-- content --></div>
<div class="slide"><!-- content --></div>
<div class="slide"><!-- content --></div>
</div>
クラスを設定します。
var MyAccordion = Class.create({
initialize: function(containingElement) {
var slides = $(containingElement).select('.slide');
... do all your other stuff, hook up event handlers to open/close, etc
}
});
そして、次のようにインスタンス化します。
new MyAccordion($('accordion1'));
これにより、複数のインスタンスを確実に作成できます。それがクラスを使うことの要点です。
Elementを拡張してメソッドを追加する場合は、次のようにしてインスタンス化する必要があります。
$('accordion1').accordion();
すべての機能をその1つのメソッドに含める必要がありますが、これはクラスを作成するよりも柔軟性が低いようです。それも少し奇妙で間違っていると感じます。
お役に立てれば。ご不明な点がございましたら、お気軽にお問い合わせください。