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 相关文章推荐
投票管理程序
Oct 09 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
开源SNS系统-ThinkSNS
May 18 PHP
php编写一个简单的路由类
Apr 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
php基础教程
Aug 26 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
Yii2单元测试用法示例
Nov 12 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 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
PHP中调用JAVA
2006/10/09 PHP
在JavaScript中调用php程序
2009/03/09 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
js获取变量
2006/08/24 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
python选择排序算法实例总结
2015/07/01 Python
Python切片操作实例分析
2018/03/16 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
综合素质自我评价评语
2015/03/06 职场文书
老员工辞职信范文
2015/05/12 职场文书