我的目标是覆盖未找到的方法,否则使用原始方法(对于我无法改变的库的向后兼容性)。
这是我到目前为止所做的,但我仍然在努力:
this.grid.getDataSource = function(){
if (typeof this.grid.getDataSource.getDataSource == "undefined")
return this.grid.getDataSource.getStore();
else return this.grid.getDataSource.getDataSource();
}
我想让getDatasource()检查它是否存在,如果不存在,请调用getStore()。如果确实存在,只需使用原始的getDatasource()。我知道这会中断,因为我还没弄明白如何引用父'this'范围。当我解决这个问题时,我会进入一个递归循环,因为它一直试图覆盖它自己。如果你有更好的方法,请告诉我!
答案 0 :(得分:1)
我认为这应该做你想要的。
this.grid.getDataSource =
this.grid.getDataSource.getDataSource || this.grid.getDataSource.getStore;
这句话将试图找到一些从左到右评估真实情况的东西。当它找到那个东西时,它会将它用作赋值的值。在这种情况下,如果getDataSource
未定义,则会将其评估为false,并检查getStore
。 getStore
存在,因此它将评估为(大致)为true,因此函数引用将分配给this.grid.getDataSource.getDataSource
;
答案 1 :(得分:0)
如果您确定getDataSource()不会抛出异常,您可以尝试
this.grid.getDataSource.getDataSource = function(){
try {
return this.getDataSource();
}
catch(ex) {
return this.getStore();
}
};
或者你可以改变
if (typeof this.getDataSource == "undefined")
到
if (typeof this.getDataSource != "function")
更新: 这有用吗?:
this.grid.getDataSource = function(){
if (typeof this.getDataSource != "function")
return this.getStore();
else
return this.getDataSource();
}