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类中定义原型方法的两种实现的区别
Mar 08 Javascript
syntaxhighlighter 使用方法
Jul 02 Javascript
详解JavaScript中的4种类型识别方法
Sep 14 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
Bootstrap导航条学习使用(一)
Feb 08 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
JS中Attr的用法详解
Oct 09 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
Dec 14 Javascript
微信小程序支付前端源码
Aug 29 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 Javascript
四十九个javascript小知识实用技巧
Nov 20 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图片验证码代码
2008/03/27 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
php时间函数用法分析
2016/05/28 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
js数组常用最重要的方法
2018/02/04 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python实现配置文件备份的方法
2015/07/30 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python正则-re的用法详解
2019/07/28 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python实现猜拳游戏
2020/03/04 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
表彰先进集体通报
2014/01/12 职场文书
网络管理员岗位职责
2014/03/17 职场文书
创先争优承诺书范文
2014/03/31 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
个人投资计划书
2014/05/01 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2015年除四害工作总结
2015/07/23 职场文书
大学生支教感言
2015/08/01 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书