JavaScript实用技巧总结

前言

     总结一下最近接触到的JavaScript语法糖,与大家共享。

     每块糖都有详细的说明和示例,就不多说了。

准确的类型检查

 1 /*
 2 * @function:
 3 *   类型检查示例
 4 *   通过此方法,可以检查某个变量是否为期望的数据类型
 5 * @params:
 6 *   obj 需要检查的变量,必选
 7 *   config 数据类型白名单,可选,默认为全部类型
 8 * @return:
 9 *   true 表示检查通过,false 未通过
10 * @examples:
11 *   typeCheck("str"); //return true
12 *   typeCheck({},{"[object Array]": 1}); //return false
13 */
14 function typeCheck(obj,config){
15   var hasOp = Object.prototype.hasOwnProperty,
16       toStr = Object.prototype.toString,
17       _config = config || {
18         "[object Object]": 1,
19         "[object Array]": 1,
20         "[object Regex]": 1,
21         "[object String]": 1,
22         "[object Number]": 1,
23         "[object Boolean]": 1,
24         "[object Function]": 1,
25         "[object Undefined]": 1,
26         "[object Null]": 1
27       };
28   
29   return hasOp.call(_config,toStr.call(obj));
30 }
View Code

 优雅的添加原型方法

 1 /*
 2 * @description:
 3 *   优雅的添加原型方法
 4 *   在公共作用域执行此代码片段即可
 5 */
 6 if(typeof Function.prototype.method !== "function") {
 7   Function.prototype.method = function(name,fn){
 8     this.prototype[name] = fn;
 9     return this;
10   };
11 }
12 
13 /*
14 * 使用示例
15 */
16 //定义一个“测试类”
17 function testFn(){
18   
19 }
20 
21 //添加测试类的成员方法
22 testFn.method("add",function(a,b){
23   return a + b;
24 }).method("sub",function(a,b){
25   return a - b;
26 });
27 
28 //实例化
29 var testObj = new testFn();
30 
31 //调用成员方法
32 testObj.add(1,5);  //return 6
33 testObj.sub(7,2);  //return 5
View Code

 快捷创建命名空间

 1 /*
 2 * @function:
 3 *   创建命名空间
 4 * @params:
 5 *   ex 命名空间表达式,例如:NSROOT.service.impl
 6 *   此表达式必须从根节点开始写起
 7 * @return:
 8 *   返回Object,此Object是表达式的最后一个节点
 9 * @others:
10 *   如果您不喜欢NSROOT这个命名,简单的查找替换即可
11 */
12 var NSROOT = NSROOT || {};
13 
14 NSROOT.namespace = function(ex){
15   var _ex = ex || "",
16       nsArray = _ex.split("."),
17       parentNode = NSROOT,
18       _s = "",
19       i = 0;
20   
21   //判断命名空间是否从根节点开始
22   if(nsArray[0] !== "NSROOT"){
23     throw("命名空间必须从根节点开始!");
24   }
25   
26   //去掉root节点
27   nsArray = nsArray.slice(1);
28   
29   for(i = 0;i<nsArray.length;i++){
30     _s = nsArray[i];
31     if(parentNode[_s] === undefined){
32       parentNode[_s] = {};
33     }
34     parentNode = parentNode[_s];
35   }
36   
37   return parentNode;
38 };
39 
40 /*
41 * 使用示例
42 */
43 //创建新的命名空间
44 var impl = NSROOT.namespace("NSROOT.service.impl");
45 alert(impl === NSROOT.service.impl);  //return true
46 
47 //创建已有的命名空间,不覆盖原来的数据
48 NSROOT.namespace("NSROOT.service.impl");
49 alert(impl === NSROOT.service.impl);  //return true
View Code

 

posted @ 2014-09-12 17:06  杨元  阅读(833)  评论(0编辑  收藏  举报