4

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 == undefinedundefined

4

1 に答える 1

4

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。)

于 2012-05-27T16:42:43.737 に答える