zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    阻止表单重复提交的办法以及支付成功后页面后退重复提交的解决方案
    jsp页面的共用
    空间谱专题02:波束形成(Beamforming)
    空间谱专题01:信号模型
    空间谱专题00:综述
    BP神经网络
    fdatool的滤波器设计
    Testbench
    Cordic算法简介
    快速删除注释
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/3968753.html
Copyright © 2011-2022 走看看