Javascript中定义方法的另类写法(批量定义Javascript对象的方法)

2021年1月11日   |   by tgcode

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

  isArray:function(v){

returntoString.apply(v)===[objectArray];
},

isDate:function(v){
returntoString.apply(v)===[objectDate];
},

isObject:function(v){
return!!v&&Object.prototype.toString.call(v)===[objectObject];
},

isPrimitive:function(v){
returnExt.isString(v)||Ext.isNumber(v)||Ext.isBoolean(v);
},

isFunction:function(v){
returntoString.apply(v)===[objectFunction];
},

isNumber:function(v){tgcode
returntypeofv===number&&isFinite(v);
},

isString:function(v){
returntypeofv===string;
},

isBoolean:function(v){
returntypeofv===boolean;
}

  上面是Extjs3.X ext-base.js里面的判断类型的代码,你仔细一看, 会发现有很多相同的东西, 如:


is类型:function(v){

returntoString.apply(v)===类型;


}

或者


is类型:
function(v){
returntypeofv===类型“;


}

然而里面的tyoeof 我们可以统一使用 toString方法来判断类型,所有上面的代码可以是同一个类型,即:

varis类型=function(v){

returntoString.call(v)===类型;
}

  上面的就是一个模型,对应这个判断的方法体内是一个的方法, 我们可以对他进行简化(但是有个弊端:可读性差),可以大大减少代码,从而可以提高Javascript加载效率,改进后的代码如下:

varEasy={},dataTypes=[Number,Boolean,String,Array,
Object,Function,Date“, “RegExp];
vartoStr=Object.prototype.toString;
varis=function(v,t){
returntoStr(o)==[object+t+];
};
for(vari=0,len=dataTypes.length,t;ilen;i++){
(
function(t){
Easy[
is+t]=function(o){
returnis(o,t);
}
})(dattgcodeaTypes[i]);//用到了闭包
}

  上面这段代码, 我们就为Easy这个对象创建了8个is开头的判断类型的方法;当然如果有些方法不合理还可以覆盖如:

Easy.isNumber=function(v){

returntoString.call(v)===[obtgcodejectNumber]&&isFinite(v);

}

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

相关推荐: 重置还是不重置-这是个CSS问题

  每个浏览器都有他自己的一个默认样式。可以保证HTML在没有自定义样式的tgcode情况下也能被有据可循的渲染。你应该知道:未访问的链接是蓝色、访问过的是紫色、strong标签加粗显示、H1的字号大一些。然后,各厂商就是喜欢让我们的生活丰富多彩一点,然后每个…

Tags: , ,