jQuery 1.9 以降、ウィジェットはそれ自体から継承できます。これが役立つ理由の実例を見つけることができませんでした。率直に言って、自分自身から継承するという考えは私の頭を壊します。この機能の目的は何ですか? この機能を使用すると、以前はできなかったこと、または以前ははるかに困難だったことができますか?
3 に答える
その理由は、同じウィジェットを再定義するためです。したがって、新しい機能を追加し、別のオブジェクトで拡張する必要はありません。
送信したリンクに示されている例では、次のようになります。
$.widget("ui.dialog", $.ui.dialog, {
close: function() {
if (confirm( "Is it closing time?" )) {
this._super("close");
}
}
});
上記のコードの実行後、ユーザーが閉じるボタンをクリックすると、作成されるすべてのダイアログに確認メッセージが表示され、ユーザーがそれを受け入れると閉じます。
リンクしてくださったスライドにあるように、「これはウィジェットを拡張する理想的な方法です」。
新しい「異なる」ウィジェット オブジェクト (「異なる」は「別の名前」を意味します) を作成せずに、ウィジェットを拡張できるようになりました。機能を追加しても、まったく同じウィジェット オブジェクト名を使用できます。
// An incredibly contrived example
$.widget("ui.dialog", $.ui.dialog, {
close: function() {
if (confirm( "Is it closing time?" )) {
this._super("close");
}
}
});
例でわかるように、既存のダイアログに表示されるダイアログ オブジェクトに機能を追加できます。つまり、新しい「extendedDialog」を作成して、既存のコードを「 extendedDialog" オブジェクト。代わりに、含まれている機能は既に利用可能であり、そこで機能しています。
これにより、objective-c のカテゴリと同様の機能が提供され、クラス/ウィジェット コード自体を変更したり、ソースにアクセスしたりすることなく、クラス (ウィジェット) に機能を追加できます。