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 相关文章推荐
转换json格式的日期为Javascript对象的函数
Jul 13 Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
Feb 06 Javascript
JS 去除Array中的null值示例代码
Nov 20 Javascript
JavaScript 数组some()和filter()的用法及区别
May 20 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
原生JS+Canvas实现五子棋游戏实例
Jun 19 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 Javascript
基于vue1和vue2获取dom元素的方法
Mar 17 Javascript
vue实现百度搜索功能
Dec 28 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
手把手教你从零开始react+antd搭建项目
Jun 03 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
批量修改RAR文件注释的php代码
2010/11/20 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP序列化操作方法分析
2016/09/28 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
JS重要知识点小结
2011/11/06 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
详解vuex的简单使用
2018/03/12 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
python字符串的方法与操作大全
2018/01/30 Python
详解Python传入参数的几种方法
2019/05/16 Python
python远程邮件控制电脑升级版
2019/05/23 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
python进行参数传递的方法
2020/05/12 Python
python爬虫请求头的使用
2020/12/01 Python
亲子拓展活动方案
2014/02/20 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
个人作风建设心得体会
2014/10/22 职场文书
小学工作总结2015
2015/05/04 职场文书
爱国主义影片观后感
2015/06/18 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS