是否有可能动态调用一个不存在的方法,然后创建它
Is it possible to call a non-existent method on the fly and then create it?
这个问题的上下文如下:我使用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
}
相关文章:
- 用javascript在对象上创建不存在的方法
- html5 拖放 - items.webkitGetAsEntry() 方法不存在
- 打字稿 - 为什么猫鼬中不存在“方法”属性
- 角度火:未定义不是一个函数($on方法不存在)
- 如何在不使用 eval 的情况下使不存在的(非成员,非全局)方法可调用
- 名称参数在 JQUERY 方法的当前上下文中不存在
- 对不存在的元素进行转义的常用方法是什么(如jQuery)
- 在mongo中检查数据并创建数据的有效方法'不存在
- 从JS调用flash方法时,函数不存在
- 如何在JavaScript中的一行中调用一个可能不存在的方法而不出错
- JavaScript:访问可能不存在的属性的子属性的最少重复的方法
- 使用量角器spyOn()为jQuery ajax()导致错误"ajax()方法不存在"
- 是否有一种方法来验证YouTube视频ID,同时处理CORS和不存在的API
- jQuery UI toggleClass方法不存在选项
- 错误:getItem()方法不存在(Angular, mocking LocalStorage)
- 解决打字错误的最佳方法-类型上不存在属性
- 仅当值不存在时才将其压入数组的最有效和干净的方法
- 给定一个id列表,查询集合中不存在哪些id的最佳方法是什么?
- 姓名'id'在Javascript方法的当前上下文中不存在
- jQuery Waypoints错误:sticky方法不存在