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 相关文章推荐
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
Jun 07 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
vue-router路由简单案例介绍
Feb 21 Javascript
基于bootstrap实现多个下拉框同时搜索功能
Jul 19 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
vue项目每30秒刷新1次接口的实现方法
Dec 04 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 Javascript
vue 中 beforeRouteEnter 死循环的问题
Apr 23 Javascript
Vue自定义组件的四种方式示例详解
Feb 28 Javascript
js实现页面图片消除效果
Mar 24 Javascript
JS实现canvas简单小画板功能
Jun 23 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读取xml实例代码
2010/01/28 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
Python查询IP地址归属完整代码
2017/06/21 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
关于旅游的活动方案
2014/08/15 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
黄山导游词
2015/01/31 职场文书
会计岗位工作总结
2015/08/12 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
react 项目中引入图片的几种方式
2021/06/02 Javascript
OpenCV全景图像拼接的实现示例
2021/06/05 Python
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL