Eri*_* H. 10 javascript prototype
我收到一个类似于此的文档的ajax feed(非常简化):
aDocs = [{title:'new doc', ext:'pdf'}, {title:'another', ext:'xlsx'}];
Run Code Online (Sandbox Code Playgroud)
我将遍历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
}
Run Code Online (Sandbox Code Playgroud)
根据上面的那篇文章,这不是官方的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;
}
Run Code Online (Sandbox Code Playgroud)
这第二种选择是否可行且有效?或者我是否重新创建这些功能,从而产生多余的开销?
再次简化上面的例子(我知道aDocs[i].ext将解决上面的问题,但我的显示和API调用方法更复杂).
这第二种选择是否可行且有效?
是.
或者我是否重新创建这些功能,从而产生多余的开销?
不,这些功能可以重复使用,而不是重新创建.所有对象将共享和函数的单个副本.在(例如)调用函数期间,在调用中,将引用函数所附加的对象.(这仅适用于您将其称为从对象检索它的表达式的一部分,例如,)getExtgetTitleaDocs[1]thisvar title = aDocs[1].getTitle();
或者,如果您喜欢,可以创建共享原型aDocs的新对象,并将对象的属性复制到新对象,但是您已经询问了如何为现有对象分配新功能,所以......
| 归档时间: |
|
| 查看次数: |
17079 次 |
| 最近记录: |