次のようなドキュメントの ajax フィードを受信しています (かなり単純化されています)。
aDocs = [{title:'new doc', ext:'pdf'}, {title:'another', ext:'xlsx'}];
aDocs 配列を繰り返し処理し、各ドキュメントに関する情報を表示すると同時に、表示用に HTML を変更し、データベースを更新するための API 呼び出しを実行できるメソッドを各ドキュメントに追加します。
ここ__proto__
で、既存のオブジェクトにメソッドを追加するには、属性を使用できることを読みました。次のようなもの:
function Doc(){}
Doc.prototype.getExt = function(){return this.ext}
Doc.prototype.getTitle = function(){return this.title}
for (var i=0; i<aDocs.length; i++){
aDocs[i].__proto__ = Doc.prototype
}
上記の記事によると、これは公式の JavaScript ではなく、IE ではサポートされておらず (サポートされることはありません)、Webkit ブラウザーでは非推奨になる可能性があります。
これは別の刺し傷です:
function getExt(){ return this.ext }
function getTitle(){return this.title}
for (var i=0; i<aDocs.length; i++){
aDocs[i].getExt = getExt;
aDocs[i].getTitle = getTitle;
}
この 2 番目の代替案は実行可能で効率的ですか? または、これらの関数を再作成して、冗長なオーバーヘッドを作成していますか?
繰り返しますが、上記の例は単純化されています (aDocs[i].ext
上記の問題を解決できることはわかっていますが、表示と API 呼び出しの方法はより複雑です)。