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 相关文章推荐
共享自己写一个框架DreamScript
Jan 20 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
Sep 29 Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
Apr 06 Javascript
Javascript简单改变表单元素背景的方法
Jul 15 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
May 28 Javascript
详解如何在Javascript和Sass之间共享变量
Nov 13 Javascript
vant 自定义 van-dropdown-item的用法
Aug 05 Javascript
JS Canvas接口和动画效果大全
Apr 29 Javascript
微信小程序基础教程之echart的使用
Jun 01 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中的extract的作用分析
2008/04/09 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
js中小数转换整数的方法
2014/01/26 Javascript
document.write的几点使用心得
2014/05/14 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
Underscore源码分析
2015/12/30 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
python处理大日志文件
2019/07/23 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
初一生物教学反思
2014/01/18 职场文书
写自荐信的注意事项
2014/03/09 职场文书
大型活动组织方案
2014/05/10 职场文书
图书室标语
2014/06/21 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript