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

如果方法在javascript中未定义,则自动加载另一个方法,javascript,class,autoload,Javascript,Class,Autoload,如果找不到给定对象的方法,我可以回退到另一个方法吗 说我只是想了解这个想法 var phoneCall new function() { function toMom() { } function catchAll() { } } q = new phoneCall; q.toMom(); q.toDad() //should fire phoneCall.catchAll(); 否-不是以跨浏览器的方式。Firefox和其他几款引擎都有这样的方法,但在Chro

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

说我只是想了解这个想法

var phoneCall new function() {

  function toMom() {

  }

  function catchAll() {

  }

 }

q = new phoneCall;
q.toMom();

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

否-不是以跨浏览器的方式。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

你可以这样做:

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();​
使用getter模式:


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

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

那将抛出一个错误。然而,你可以像q.toDad那样做?q、 托达:卡察尔。但我认为这不是OP想要的。谢谢jmar77,你说得对。我理解OP想要做什么,我认为这是唯一的出路。我仍然认为这是一个有效的解决方案,不是吗?我认为这是一个可能的解决方案,但它将检查代码消耗电话呼叫的负担,而不是将逻辑内部化。我尝试了一些接近他描述的东西,但我认为他真正想要的是,比如Ruby的missing_方法。谢谢,但这实际上等于制作一个带有开关的函数和一个默认情况,而不是我想要的映射不管怎样,谢谢你,我想这不是你想要的。这个问题的真正答案是没有部分。。。剩下的只是一个潜在的解决方法:。在JavaScript中,最接近的是,但如上所述,这只适用于FF。嘿,谢谢你的方法,但实际上你可以用一个带有开关的函数和一个默认情况完成同样的事情,重要的是你调用它的方式。。myObject.get'method2';我想要的是myobject.someMethodMissing映射到myobject.catchAll;谢谢你抽出时间,干杯:
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