如果在javascript中未定义方法,则自动加载另一种方法

时间:2012-05-10 13:29:10

标签: javascript class autoload

如果找不到给定对象的方法,我可以回退到另一个方法吗?

说我有(只是为了得到这个想法)

var phoneCall new function() {

  function toMom() {

  }

  function catchAll() {

  }

 }

q = new phoneCall;
q.toMom();

q.toDad() //should fire phoneCall.catchAll();

4 个答案:

答案 0 :(得分:0)

不 - 不是以跨浏览器的方式。 Firefox和其他一些引擎有一种方法可以做到这一点,但它不适用于Chrome,IE等。代理最终将允许这样的功能,但这仍然处于引擎采用的早期阶段。

<小时/> 编辑:这里有一些代码可能会让你开始使用可以工作的东西:

var phoneCall = {
    to: function(whom) {
        (phoneCall.people[whom] || phoneCall.catchAll)();
    },
    people: {
        mom: function() {
            // call mom functionality
        }
    },
    catchAll: function() {
        // generic call functionality
    }
};


phoneCall.to('mom');
phoneCall.to('dad'); // invokes catchAll

答案 1 :(得分:0)

你可以这样做:

q.toDad() || q.catchAll();

编辑:

用户jmar77对此代码无效是正确的,因为它返回的是函数的结果而不是函数本身...我的错误。这是更新后的代码:

function phoneCall() {
   this.toMom = function() {
        console.log('Mom was called.');
    }
   this.catchAll = function() {
        console.log('Catch all was called');
    }
}

q = new phoneCall();
q.toMom();
q.toDad ? q.toDad() : q.catchAll();​

http://jsfiddle.net/remibreton/yzDh7/

答案 2 :(得分:0)

使用getter模式:

http://jsfiddle.net/XjgPW/1/

var myObject = (function() {
    var methods = {
        method1: function () {
            console.log('method1 called');
        },
        method2: function () {
            console.log('method2 called');
        },  
        defaultMethod: function () {
            console.log('defaultMethod called');
        }
    };

    var get = function (name) {
        if (methods.hasOwnProperty(name)) {
            return methods[name];
        } else {
            return methods.defaultMethod;
        }
    };

    return {
        get: get
    };
}());

答案 3 :(得分:0)

以下代码演示了如果第一个方法不存在则调用回退方法:

q = {};
q.toDad = function() {
    console.log("to dad");
}
(q.toMom || q.toDad)();  // Will output "to dad" to the console

q.toMom = function() {
    console.log("to mom");
}
(q.toMom || q.toDad)();  // Will output "to mom" to the console