Javascript中定义方法的另类写法(批量定义Javascript对象的方法)
2021年1月11日 | by tgcode
用了很多的Javascript框架,偶尔也会去看一下框架的源码,经常会看到这样的代码:
isArray:function(v){
returntoString.apply(v)===‘[objectArray]‘;
},
returntoString.apply(v)===‘[objectDate]‘;
},
return!!v&&Object.prototype.toString.call(v)===‘[objectObject]‘;
},
returnExt.isString(v)||Ext.isNumber(v)||Ext.isBoolean(v);
},
returntoString.apply(v)===‘[objectFunction]‘;
},
returntypeofv===‘number‘&&isFinite(v);
},
returntypeofv===‘string‘;
},
returntypeofv===‘boolean‘;
}
},
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){tgcodereturntypeofv===‘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]);//用到了闭包
}
“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开头的判断类型的方法;当然如果有些方法不合理还可以覆盖如:
所以有时候写一些方法功能类似的方法可以考虑这种写法, 饿了,吃饭去了,这次就介绍到这里了, 下回再聊。
每个浏览器都有他自己的一个默认样式。可以保证HTML在没有自定义样式的tgcode情况下也能被有据可循的渲染。你应该知道:未访问的链接是蓝色、访问过的是紫色、strong标签加粗显示、H1的字号大一些。然后,各厂商就是喜欢让我们的生活丰富多彩一点,然后每个…