次のコードを想像してください。
$.get( "ajax/getColorData.php", function( data ) {
this.colorData = data;
});
「データ」の値は次のとおりです。
this.colorData = [
{
colorName: 'Red',
colorIsInRainbow:true
},
{
colorName: 'Orange',
colorIsInRainbow: true
},
{
colorName: 'Magenta',
colorIsInRainbow: false
}
];
質問1
ここで、データをダウンロードした後、配列内のすべてのエントリにメソッド「colorStartsWithR」を追加するとします。配列のすべてのメンバーで定義するのではなく、プロトタイプでこのメソッドを何らかの方法で定義できると「思います」。しかし、これらのオブジェクトは私が作成したものではなく、$.get によって返されたものであるため、それができるかどうかはわかりません。正しい方向に考えているかどうかはわかりません。
質問2
もう少し詳しく説明すると、配列のすべてのメンバーにプロパティを追加したい場合、具体的には次のようになります。
{
colorName: 'Magenta',
colorIsInRainbow: false,
userClickedThisColor:ko.observable()
}
このようにして、(knockoutjs を介して) リストをバインドし、チェックボックスを含めることができます。この場合、各メンバーが独自の ko.observable プロパティを取得する必要があるため、プロトタイプが役立つかどうか疑問に思います。素早い本能は、次のようなことをすることです:
for (var i=0;i<this.colorData.length;i++)
{
this.colorData[i].userClickedThisColor=ko.observable()
}
それは問題なく動作しますが、色のリストを取得する方法が複数あること、またはユーザーが新しい色インスタンスを作成できること、および上記で行ったカスタマイズがより複雑であると想像してください。上記の「アドオン」ロジックを複製する必要があります。よりスマートな方法はありますか?
強く型付けされた言語でほとんどの時間を費やしてきたので、これらのことは私には明らかではないことがあります。提案をありがとう...
-ベン