是否可以动态调用不存在的方法然后创建它?

时间:2012-12-23 22:46:46

标签: javascript jquery-plugins

这个问题的上下文如下:我使用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函数定义方法名称(或接口)。这将是很多代码开销,并且非常耗时。

2 个答案:

答案 0 :(得分:2)

ECMAScript Harmony支持Proxies,允许您拦截属性访问。不幸的是,它还没有被广泛支持(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__的东西,但同样,它似乎并没有被广泛支持。

答案 1 :(得分:0)

你可以将它包装在try catch块中。

try {
   $("selector").php.strlen(param);
} catch(err) {
   // do sth
}