• 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
  • 相关阅读:
    SDOI2008]仪仗队
    洛谷P1414 又是毕业季II
    P3865 【模板】ST表
    [HAOI2007]理想的正方形
    noip 2011 选择客栈
    [AHOI2009]中国象棋
    洛谷P3387 【模板】缩点
    [SCOI2005]最大子矩阵
    [CQOI2009]叶子的染色
    LibreOJ #116. 有源汇有上下界最大流
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/3968753.html
Copyright © 2020-2023  润新知