是否可以(以高效的方式)在JavaScript中定义“后备”方法?
例如
function MyObject () {
/* what do i have to add here to have my defaultMethod? */
}
var obj = new MyObject ();
obj.doesntExistInMyObject (); // I want defaultMethod to be called
obj.doesntExistEither (); // I want defaultMethod to be called, too
即:每当我写defaultMethod
和obj.calledMethod ();
时,我都希望obj.calledMethod == undefined
被调用,但我不想在调用代码中检查undefined
。
答案 0 :(得分:4)
JavaScript目前没有该功能。不过,它可能会在下一个版本中通过proxies。所以在那之前,为了做到这一点,你必须做一些相当难看的事情,比如:
MyObject.prototype.ex = function(fname) {
var f = this[fname],
args = Array.prototype.slice.call(arguments, 1);
if (typeof f === "function") {
return f.apply(this, args);
}
return this.defaultMethod.apply(this, args);
};
...并像这样使用它:
var obj = new MyObject();
obj.ex("doesntExistInMyObject", "arg", "arg");
(ex
代表“执行”,因为call
太容易与Function#call
混淆。)