JavaScript常用小技巧小结


Posted in Javascript onDecember 29, 2014

前言

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

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

准确的类型检查

 /*

 * @function:

 *   类型检查示例

 *   通过此方法,可以检查某个变量是否为期望的数据类型

 * @params:

 *   obj 需要检查的变量,必选

 *   config 数据类型白名单,可选,默认为全部类型

 * @return:

 *   true 表示检查通过,false 未通过

 * @examples:

 *   typeCheck("str"); //return true

 *   typeCheck({},{"[object Array]": 1}); //return false

 */

 function typeCheck(obj,config){

   var hasOp = Object.prototype.hasOwnProperty,

       toStr = Object.prototype.toString,

       _config = config || {

         "[object Object]": 1,

         "[object Array]": 1,

         "[object Regex]": 1,

         "[object String]": 1,

         "[object Number]": 1,

         "[object Boolean]": 1,

         "[object Function]": 1,

         "[object Undefined]": 1,

         "[object Null]": 1

       };

   

   return hasOp.call(_config,toStr.call(obj));

 }

 优雅的添加原型方法

 /*

 * @description:

 *   优雅的添加原型方法

 *   在公共作用域执行此代码片段即可

 */

 if(typeof Function.prototype.method !== "function") {

   Function.prototype.method = function(name,fn){

     this.prototype[name] = fn;

     return this;

   };

 }

 /*

 * 使用示例

 */

 //定义一个“测试类”

 function testFn(){

 }

 //添加测试类的成员方法

 testFn.method("add",function(a,b){

   return a + b;

 }).method("sub",function(a,b){

   return a - b;

 });

 //实例化

 var testObj = new testFn();

 //调用成员方法

 testObj.add(1,5);  //return 6

 testObj.sub(7,2);  //return 5

 快捷创建命名空间

 /*

 * @function:

 *   创建命名空间

 * @params:

 *   ex 命名空间表达式,例如:NSROOT.service.impl

 *   此表达式必须从根节点开始写起

 * @return:

 *   返回Object,此Object是表达式的最后一个节点

 * @others:

 *   如果您不喜欢NSROOT这个命名,简单的查找替换即可

 */

 var NSROOT = NSROOT || {};

 NSROOT.namespace = function(ex){

   var _ex = ex || "",

       nsArray = _ex.split("."),

       parentNode = NSROOT,

       _s = "",

       i = 0;

   //判断命名空间是否从根节点开始

   if(nsArray[0] !== "NSROOT"){

     throw("命名空间必须从根节点开始!");

   }

   //去掉root节点

   nsArray = nsArray.slice(1);

   for(i = 0;i<nsArray.length;i++){

     _s = nsArray[i];

     if(parentNode[_s] === undefined){

       parentNode[_s] = {};

     }

     parentNode = parentNode[_s];

   }

   return parentNode;

 };

 /*

 * 使用示例

 */

 //创建新的命名空间

 var impl = NSROOT.namespace("NSROOT.service.impl");

 alert(impl === NSROOT.service.impl);  //return true

 //创建已有的命名空间,不覆盖原来的数据

 NSROOT.namespace("NSROOT.service.impl");

 alert(impl === NSROOT.service.impl);  //return true
Javascript 相关文章推荐
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
node.js中的fs.lchmod方法使用说明
Dec 16 Javascript
Vue.js 和 MVVM 的注意事项
Nov 07 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
Apr 12 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
微信小程序picker组件下拉框选择input输入框的实例
Sep 20 Javascript
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
了解javascript中的Dom操作
May 27 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
jQuery中:gt选择器用法实例
Dec 29 #Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 #Javascript
JavaScript中的值类型详细介绍
Dec 29 #Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 #Javascript
JavaScript中的console.assert()函数介绍
Dec 29 #Javascript
jQuery中:eq()选择器用法实例
Dec 29 #Javascript
根据配置文件加载js依赖模块
Dec 29 #Javascript
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
JavaScript将取代AppleScript?
2014/09/18 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
js密码强度校验
2015/11/10 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
js实现登录与注册界面
2017/11/01 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
vue中如何使用ztree
2018/02/06 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
浅析python函数式编程
2020/09/26 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
单身旅行者的单身假期:Just You
2018/04/08 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
自荐信格式
2013/12/01 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书