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 相关文章推荐
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 Javascript
window.location和document.location的区别分析
Dec 23 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
js打开windows上的可执行文件示例
May 27 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
仿京东快报向上滚动的实例
Dec 13 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
Aug 03 Javascript
JavaScript中callee和caller的区别与用法实例分析
Jun 28 Javascript
微信小程序 如何保持登录状态
Aug 16 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
DedeCms模板安装/制作概述
2007/03/11 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
用vue写一个日历
2020/11/02 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Python os模块常用方法和属性总结
2020/02/20 Python
html5与css3小应用
2013/04/03 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
八年级历史教学反思
2014/01/10 职场文书
高中校园广播稿
2014/01/11 职场文书
房地产开盘策划方案
2014/02/10 职场文书
《观舞记》教学反思
2014/04/16 职场文书
介绍信样本
2015/01/31 职场文书
英文版辞职信
2015/02/28 职场文书
让子弹飞观后感
2015/06/11 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
java解析XML详解
2021/07/09 Java/Android
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js