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 相关文章推荐
javascript 图片裁剪技巧解读
Nov 15 Javascript
js实现的map方法示例代码
Jan 13 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
jQuery获得document和window对象宽度和高度的方法
Mar 25 Javascript
详解JS正则replace的使用方法
Mar 06 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
Mar 19 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 Javascript
js实现微信聊天界面
Aug 09 Javascript
JavaScript执行机制详细介绍
Dec 06 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版本号
2006/10/09 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
JS图片放大效果简单实现代码
2016/09/08 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
python发送HTTP请求的方法小结
2015/07/08 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
《中彩那天》教学反思
2014/02/22 职场文书
公司会议策划方案
2014/05/17 职场文书
Docker安装MySql8并远程访问的实现
2022/07/07 Servers
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers