Javascript中定义方法的另类写法(批量定义js对象的方法)


Posted in Javascript onFebruary 25, 2011
isArray : function(v){ 
return toString.apply(v) === '[object Array]'; 
}, 
isDate : function(v){ 
return toString.apply(v) === '[object Date]'; 
}, 
isObject : function(v){ 
return !!v && Object.prototype.toString.call(v) === '[object Object]'; 
}, 
isPrimitive : function(v){ 
return Ext.isString(v) || Ext.isNumber(v) || Ext.isBoolean(v); 
}, 
isFunction : function(v){ 
return toString.apply(v) === '[object Function]'; 
}, 
isNumber : function(v){ 
return typeof v === 'number' && isFinite(v); 
}, 
isString : function(v){ 
return typeof v === 'string'; 
}, 
isBoolean : function(v){ 
return typeof v === 'boolean'; 
}

上面是Extjs3.X ext-base.js里面的判断类型的代码,你仔细一看, 会发现有很多相同的东西, 如:
is类型:function(v){ 
return toString.apply(v) ==="类型"; 
} 
或者 
is类型:function(v){ 
returntypeof v ==="类型"; 
}

然而里面的tyoeof 我们可以统一使用 toString方法来判断类型,所有上面的代码可以是同一个类型,即:
var is类型=function(v){ 
return toString.call(v) ==="类型"; 
}

上面的就是一个模型,对应这个判断的方法体内是一个的方法, 我们可以对他进行简化(但是有个弊端:可读性差),可以大大减少代码,从而可以提高Javascript加载效率,改进后的代码如下:
var Easy={}, dataTypes = ["Number", "Boolean", "String", "Array", 
"Object", "Function", "Date", "RegExp"]; 
var toStr = Object.prototype.toString; 
var is = function (v, t) { 
return toStr(o) == "[object " + t + "]"; 
}; 
for (var i = 0, len = dataTypes.length, t; i < len; i++) { 
(function (t) { 
Easy["is" + t] = function (o) { 
return is(o, t); 
} 
})(dataTypes[i]);//用到了闭包 
}

上面这段代码, 我们就为Easy这个对象创建了8个is开头的判断类型的方法;当然如果有些方法不合理还可以覆盖如:
Easy.isNumber=function(v){ 
return toString.call(v) ==="[object Number]"&& isFinite(v); 
}

所以有时候写一些方法功能类似的方法可以考虑这种写法, 饿了,吃饭去了,这次就介绍到这里了, 下回再聊。
Javascript 相关文章推荐
JS中引用百度地图并将百度地图的logo和信息去掉
Sep 29 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
Jan 19 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
Jquery表单验证失败后不提交的解决方法
Oct 18 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 Javascript
Vue原理剖析 实现双向绑定MVVM
May 03 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
搭建基于express框架运行环境的方法步骤
Nov 15 Javascript
JS实现可用滑块滑动的缓动图代码
Sep 01 Javascript
JavaScript中Object、map、weakmap的区别分析
Dec 15 Javascript
23个Javascript弹出窗口特效整理
Feb 25 #Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
Feb 24 #Javascript
dojo随手记 gird组件引用
Feb 24 #Javascript
浏览器常用高宽的jquery插件
Feb 24 #Javascript
基于jquery的横向滚动条(滑动条)
Feb 24 #Javascript
基于JQuery的日期联动实现代码
Feb 24 #Javascript
jQuery boxy弹出层插件中文演示及使用讲解
Feb 24 #Javascript
You might like
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
js实现网站首页图片滚动显示
2013/02/04 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
vue中锚点的三种方法
2018/07/06 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
Python脚本暴力破解栅栏密码
2015/10/19 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
卖房协议书
2014/04/11 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
python开发人人对战的五子棋小游戏
2022/05/02 Python