我可以在JavaScript中定义一个“回退”方法吗?

Can I define a "fallback" method in JavaScript?

本文关键字:回退 一个 方法 JavaScript 定义 我可以      更新时间:2023-09-26

是否可以(以高性能的方式)在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

即:我希望每当我编写obj.calledMethod ();obj.calledMethod == undefined时调用defaultMethod,但我不想检查调用代码中的undefined

JavaScript 目前没有这个功能。不过,它很可能在下一个版本中通过代理。所以在那之前,要做到这一点,你必须做一些相当丑陋的事情,比如:

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混淆。