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 相关文章推荐
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
Sep 28 Javascript
JS实现淘宝幻灯片效果的实现方法
Mar 22 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
Nov 08 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
如何用jquery控制表格奇偶行及活动行颜色
Apr 20 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
JavaScript数据结构与算法之链表
Jan 29 Javascript
原生js代码实现图片放大境效果
Oct 30 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
JavaScript十大取整方法实例教程
Dec 03 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
计数器详细设计
2006/10/09 PHP
URL Rewrite的设置方法
2007/01/02 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
js实现随机数小游戏
2019/06/28 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
python输出指定月份日历的方法
2015/04/23 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
python gdal安装与简单使用
2019/08/01 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
python数值基础知识浅析
2019/11/19 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
社团成立邀请函
2014/01/08 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
个人工作表现评语
2014/04/30 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书