我收到了一个看起来像这样(非常简化)的文档的 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;
}
这第二种选择是否可行且有效?还是我重新创建了这些功能,从而产生了多余的开销?
再次简化了上面的例子(我知道aDocs[i].ext
会解决上面的问题,但是我的显示和 API 调用方法更复杂)。