3

这个问题的上下文如下:我已经使用 jQuery 推荐的设计模式编写了一个 jQuery 插件,其中您传递一个字符串作为插件的第一个参数来调用所需(和预定义)的方法,该方法是你的插件方法。如:

$("selector").php('method_name');

然而,对于我的特定插件(它只是通过一个简单的 AJAX 处理程序调用 PHP 函数),我想为其用户提供以这种方式调用给定后端 PHP 函数的能力:

$("selector").php.strlen(param); // As an example of calling the PHP strlen function

其中 .strlen 不是 .php 对象(或任何其他对象)的已定义方法。换句话说,有没有办法阻止 JavaScript 抛出异常并捕获用户试图调用的所需方法名称的名称,而实际上该方法尚未定义且不存在?

出于显而易见的原因,我不想为每个 PHP 函数定义方法名称(或接口)。这将是大量的代码开销并且非常耗时。

4

2 回答 2

3

ECMAScript Harmony 支持允许您拦截属性访问的代理。不幸的是,它还没有得到广泛的支持(Firefox 18 支持它)。

var php = new Proxy({}, {
    get: function (target, name) {
        return function () {
            var args = Array.prototype.slice.call(arguments);
            alert('Here you would call ' + name + '(' + args.join(', ') + ')');
        };
    }
});

php.strlen('hello');

有一个东西叫做__noSuchMethod__,但同样,它似乎并没有得到广泛的支持。

于 2012-12-23T23:04:14.440 回答
0

您可以将其包装在 try catch 块中。

try {
   $("selector").php.strlen(param);
} catch(err) {
   // do sth
}
于 2012-12-23T22:57:57.263 回答