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