0

n 個のコレクションを保持し、1 つだけのように動作するカスタム コレクション (GenericList と呼びましょう) を構築しようとしています。

通常の Backbone コレクションのすべての機能を継承するために、GenericList のプロトタイプを の新しいインスタンスに設定しますBackbone.Collection。次に、、、、などfetch()の重要なものを上書きreset()します。GenericList から追い出したい (基本的に追加して作成する) 関数もあります。on()off()

したがって、これらの関数を削除するには、まずインスタンス プロトタイプを取得します。これはBackbone.CollectionBackbone.Collections プロトタイプです。これは単にObjectすべてのコレクション関数を保持する です。そこdeleteから関数を取得すると、アプリ全体の Backbone.Collection のすべてのインスタンスがこれらの関数を失います。それらはすべてその 1 つのオブジェクトから継承されるためです。

deleteだから私の質問は、その関数がオブジェクトプロトタイプチェーンのどこかに定義されていても、オブジェクトの関数を隠す以外のテクニックはありますか?

編集:フィドルをリンクします...そしてgithubのもの

4

2 に答える 2

0

まあ、それはまさにプロトタイプがJavascriptで機能する方法です。Javascriptでプロトタイプから継承されたプロパティを参照すると、実際に発生しているのは、Javascriptが最初にオブジェクト自体でそのプロパティを検索し、見つからない場合は、プロトタイプチェーンを上ってプロパティを検索することです。これはプロパティルックアップ時に発生し、抽象プロトタイプ定義ではなく、実際のプロトタイプオブジェクトで発生します。したがって、プロトタイプとして使用しているオブジェクトから何かを削除すると、その直後に、そのオブジェクトから継承したオブジェクトであっても、そのプロパティを参照できなくなります。

別の言い方をすれば、Javascriptには「クラス」や「インスタンス」などはありません。インスタンスのみがあります。

これを正しく行うには、Backbone.Collectionから関数を作成した、GenericListから関数を削除する必要があります。それ以外の場合は、実際にBackbone.Collectionを変更しています。

于 2012-09-28T11:21:23.607 に答える
0

new Backbone.Collectionからではなく、から継承することで、私が望むことを正確に達成しました_.clone(Backbone.Collection.prototype)。このようにして、私はプロトタイプとして自分の物理オブジェクトを持ち、他のコレクションに影響を与えることなく、必要なものを削除することができます。

コードに興味がある場合は、github(行114)で更新しました。

于 2012-09-28T13:22:32.930 に答える