js下函数般调用正则的方法附代码


Posted in PHP onJune 22, 2008

曾经 ECMAScript 4 建议指出这个功能将会增加到 ES4 规范中,但后来的在 ES4-discuss mailing list 的讨论中,这个建议可能被废除。

然而,你可以通过增加 call 和 apply 方法到 RegExp.prototype 中类似的现实这些方法。既有助于功能设计,又可实现对函数和正则表达式均有效的隐藏类型(duck-typed )代码。因此,让我们增加这些方法。

RegExp.prototype.call = function (context, str) {
    return this.exec(str);
};
RegExp.prototype.apply = function (context, args) {
    return this.exec(args[0]);
};注意上面的两个方法完全忽略 context 参数,你可以提交 null 或者 任何其他作为 context 的对象,并且你将会类似的得到正则 exec 方法的返回值。使用上面的方法,无论在什么情况下,使我们正常地使用正则表达式和函数变得容易得多。一些很明显的例子,比如这些在 JavaScript 1.6 的数组迭代中很有用。下面的 filter, every, some, 和 map 方法的执行可以跨浏览器。

if (!Array.prototype.filter) {
    // 返回一个数组,如果提供的过滤函数返回 true,则返回存在的数组中的元素。
    Array.prototype.filter = function (func, context) {
        var results = [];
        for (var i = 0; i < this.length; i++) {
            if (i in this && func.call(context, this[i], i, this))
            results.push(this[i]);
        }
        return results;
    };
}

if (!Array.prototype.every) {
    // 返回 true ,如果数组中的每个元素满足提供的测试函数。
    Array.prototype.every = function (func, context) {
        for (var i = 0; i < this.length; i++) {
            if (i in this && !func.call(context, this[i], i, this))
            return false;
        }
        return true;
    };
}

if (!Array.prototype.some) {
    // 返回 true,如果数组中至少有一个元素满足提供的测试函数。
    Array.prototype.some = function (func, context) {
        for (var i = 0; i < this.length; i++) {
            if (i in this && func.call(context, this[i], i, this))
            return true;
        }
        return false;
    };
}

if (!Array.prototype.map) {
    // 返回一个数组,现有数组中的每个元素调用提供的函数的返回值。
    Array.prototype.map = function (func, context) {
        var results = [];
        for (var i = 0; i < this.length; i++) {
            if (i in this)
            results[i] = func.call(context, this[i], i, this);
        }
        return results;
    };
}因为exec 方法返回数组或 null 值,并会恰当的类型转换为 true 和 false,上面的代码允许我们像这样使用:["a","b","ab","ba"].filter(/^a/),返回所有以“a”开始的值:["a","ab"]。

确实,在 Firefox 中已经实现了 Array.prototype.filter ,由于 exec 的间接调用已经在该浏览器中起作用了。但是如果 filter 没有添加 RegExp.prototype.call 方法,却无法跨浏览器执行。

PHP 相关文章推荐
一些关于PHP的知识
Nov 17 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
PHP获取数组最大值下标的方法
May 12 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
php的正则处理函数总结分析
Jun 20 #PHP
PHP伪静态页面函数附使用方法
Jun 20 #PHP
PHP伪静态写法附代码
Jun 20 #PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 #PHP
php学习 字符串课件
Jun 15 #PHP
php学习 函数 课件
Jun 15 #PHP
PHP学习 运算符与运算符优先级
Jun 15 #PHP
You might like
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
PHP+DBM的同学录程序(3)
2006/10/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
解析php常用image图像函数集
2013/06/24 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
挂靠协议书
2015/01/27 职场文书
同学毕业留言寄语
2015/02/27 职场文书
车间质检员岗位职责
2015/04/08 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
Python竟然能剪辑视频
2021/05/25 Python