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 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 Javascript
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
May 16 Javascript
浅谈vue首屏加载优化
Jun 28 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
详解JavaScript中new操作符的解析和实现
Sep 04 Javascript
ES6中的类(Class)示例详解
Dec 09 Javascript
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
Oct 05 Javascript
JavaScript 与 TypeScript之间的联系
Nov 27 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
使用无限生命期Session的方法
2006/10/09 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
jquery radio 操作代码
2011/03/16 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
jQuery实现定时隐藏对话框的方法分析
2018/02/12 jQuery
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
Ubuntu下安装PyV8
2016/03/13 Python
Django时区详解
2019/07/24 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
Django使用rest_framework写出API
2020/05/21 Python
python新手学习可变和不可变对象
2020/06/11 Python
遇到的Mysql的面试题
2014/06/29 面试题
幼儿师范毕业生自荐信
2013/11/09 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
培训心得体会
2013/12/29 职场文书
市三好学生主要事迹
2014/01/28 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
库房管理员岗位职责
2014/03/09 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
法定代表人资格证明书
2014/09/11 职场文书
农业生产宣传标语
2014/10/08 职场文书
2015年底工作总结范文
2015/05/15 职场文书
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js