博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript中定义方法的另类写法(批量定义Javascript对象的方法)
阅读量:4623 次
发布时间:2019-06-09

本文共 1707 字,大约阅读时间需要 5 分钟。

用了很多的Javascript框架,偶尔也会去看一下框架的源码,经常会看到这样的代码:

  isArray : function(v){

            
return
 toString.apply(v) 
===
 
'
[object Array]
'
;
        },
        
        isDate : 
function
(v){
            
return
 toString.apply(v) 
===
 
'
[object Date]
'
;
        },
        
        isObject : 
function
(v){
            
return
 
!!
&&
 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);

}

 

 

所以有时候写一些方法功能类似的方法可以考虑这种写法, 饿了,吃饭去了,这次就介绍到这里了, 下回再聊。 

 

 

转载于:https://www.cnblogs.com/Easyjs/archive/2011/02/25/1965267.html

你可能感兴趣的文章
Hello,Android
查看>>
Sublime Text 3 build 3103 注册码
查看>>
删与改
查看>>
SAP 中如何寻找增强
查看>>
spi驱动无法建立spidev问题
查看>>
ANDROID开发之SQLite详解
查看>>
如何依靠代码提高网络性能
查看>>
Zookeeper要安装在奇数个节点,但是为什么?
查看>>
discuz 微社区安装记录
查看>>
[BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
查看>>
配置的热更新
查看>>
MySQL事务的开启与提交,autocommit自动提交功能
查看>>
PriorityQueue
查看>>
CODEVS1403 新三国争霸
查看>>
iOS 环信离线推送
查看>>
WPFTookit Chart 高级进阶
查看>>
雷云Razer Synapse2.0使用测评 -第二次作业
查看>>
django上传文件
查看>>
CVPR2013-papers
查看>>
PHP之时间函数
查看>>