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 相关文章推荐
Views rows style模板重写代码
May 16 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
PHP 观察者模式的实现代码
May 10 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
PHP安装memcached扩展笔记
May 28 PHP
php实现多城市切换特效
Aug 09 PHP
全面解读PHP的人气开发框架Laravel
Oct 15 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 PHP
Yii框架模拟组件调用注入示例
Nov 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
PHP生成HTML静态页面实例代码
2008/08/31 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python将list转为matrix的方法
2018/12/12 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL