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控制字体大小的代码
Oct 04 Javascript
javascript动态设置样式style实例分析
May 13 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
跟我学习javascript的作用域与作用域链
Nov 19 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
Dec 08 Javascript
vue 实现全选全不选的示例代码
Mar 29 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
Vue的watch和computed方法的使用及区别介绍
Sep 06 Javascript
vue+express+jwt持久化登录的方法
Jun 14 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
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
Python异常学习笔记
2015/02/03 Python
Python自动生产表情包
2017/03/17 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
培训演讲稿范文
2014/01/12 职场文书
高一家长会邀请函
2014/01/12 职场文书
毕业生评语大全
2015/01/04 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
入党申请书怎么写?
2019/06/21 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript