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弹窗代码 可以指定弹出间隔
Jul 03 Javascript
BOM与DOM的区别分析
Oct 26 Javascript
JavaScript实现的石头剪刀布游戏源码分享
Aug 22 Javascript
推荐5 个常用的JavaScript调试技巧
Jan 08 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
javascript跨域原因以及解决方案分享
Apr 08 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
AngularJS自定义控件实例详解
Dec 13 Javascript
树结构之JavaScript
Jan 24 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 Javascript
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
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人民币金额数字转中文大写的函数代码
2013/02/27 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
javascript 的Document属性和方法集合
2010/01/25 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
Python实现的栈(Stack)
2018/01/26 Python
Random 在 Python 中的使用方法
2018/08/09 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
python文件排序的方法总结
2020/09/13 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
抽奖活动主持词
2014/03/31 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
详解Redis瘦身指南
2021/05/26 Redis
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
Java中的Kotlin 内部类原理
2022/06/16 Java/Android