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 相关文章推荐
Cookie 小记
Apr 01 Javascript
两个Javascript小tip资料
Nov 23 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
Dec 13 Javascript
Ionic + Angular.js实现图片轮播的方法示例
May 21 Javascript
js案例之鼠标跟随jquery版(实例讲解)
Jul 21 jQuery
详解Vue快速零配置的打包工具——parcel
Jan 16 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
May 21 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
vue生命周期和react生命周期对比【推荐】
Sep 19 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 Javascript
小程序实现录音功能
Sep 22 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为php增加openssl模块的方法
2011/06/14 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
python脚本定时发送邮件
2020/12/22 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
优秀信贷员先进事迹
2014/01/31 职场文书
局火灾防控工作方案
2014/05/25 职场文书
医德考评自我评价
2014/09/14 职场文书
慈善募捐倡议书
2015/04/27 职场文书
责任书格式
2019/04/18 职场文书