是否有可能动态调用一个不存在的方法,然后创建它

Is it possible to call a non-existent method on the fly and then create it?

本文关键字:方法 不存在 然后 创建 一个 动态 有可能 调用 是否      更新时间:2023-09-26

这个问题的上下文如下:我使用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函数定义方法名(或接口),原因很明显。这会产生大量的代码开销,并且非常耗时。

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__的东西,但是,它似乎没有被广泛支持。

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

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