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计数器代码
Nov 04 Javascript
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
将List对象列表转换成JSON格式的类实现方法
Jul 04 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
JavaScript学习笔记整理_关于表达式和语句
Sep 19 Javascript
Bootstrap超大屏幕的实现代码
Mar 22 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 Javascript
小程序实现录音功能
Sep 22 Javascript
JSONObject与JSONArray使用方法解析
Sep 28 Javascript
使用Mock.js生成前端测试数据
Dec 13 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
学习php中的正则表达式
2014/08/17 PHP
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
使用store来优化React组件的方法
2017/10/23 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
Python中基本的日期时间处理的学习教程
2015/10/16 Python
带你了解python装饰器
2017/06/15 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
以下的初始化有什么区别
2013/12/16 面试题
编程实现去掉XML的重复结点
2014/05/28 面试题
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
《灯光》教学反思
2014/02/08 职场文书
打架检讨书2000字
2014/02/22 职场文书
秦兵马俑导游词
2015/02/02 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
详解Redis基本命令与使用场景
2021/06/01 Redis