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 相关文章推荐
javascript 小型动画组件与实现代码
Jun 02 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
php输出文字乱码的解决方法
Oct 04 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
推荐文章系统(一)
2006/10/09 PHP
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
Python 连连看连接算法
2008/11/22 Python
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python常见数制转换实例分析
2015/05/09 Python
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
python logging日志模块的详解
2017/10/29 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
英语感恩演讲稿
2014/01/14 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
期末评语大全
2014/05/04 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
辩论赛新闻稿
2015/07/17 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书