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 相关文章推荐
学习YUI.Ext 第七天--关于View&amp;JSONView
Mar 10 Javascript
javascript html 静态页面传参数
Apr 10 Javascript
jquery 操作DOM的基本用法分享
Apr 05 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
简介JavaScript中的getSeconds()方法的使用
Jun 10 Javascript
Javascript页面跳转常见实现方式汇总
Nov 28 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
May 05 Javascript
记一次webpack3升级webpack4的踩坑经历
Jun 12 Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 Javascript
vuex管理状态仓库使用详解
Jul 29 Javascript
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 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 快速生成 Flash 动画的方法
2007/03/06 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
python字符串的常用操作方法小结
2016/05/21 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
财务部岗位职责
2013/11/19 职场文书
民族团结先进个人材料
2014/02/05 职场文书
信息技术教学反思
2014/02/12 职场文书
供货协议书
2014/04/22 职场文书
大学新生军训方案
2014/05/03 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
《正比例》教学反思
2016/02/23 职场文书