JS技巧
来源:互联网 发布:dota2起源2多核优化 编辑:程序博客网 时间:2024/06/07 00:49
1、自定义命名空间
在项目中,经常会遇到函数名冲突,在JAVA中由于有包的概念,能很好的解决命令冲突的问题。在js我们只能自己注意函数名,但是也有一些小技巧。在nodejs里面,我们可以利用下面的函数处理函数名冲突问题:
//首先定义一个全局变量,也可以不定义//原理其实很简单,在JS中如果A已经被定义了,你可以在使用A.a定义一个新变量,但是A.a.b就会出错。//我们的例子程序其实就是这个原理。fly作为全局域global的成员,然后给fly域再加一个fn的变量。var fly = {};//给全局变量定义一个叫fn的函数,作为类似JAVA包名的命名空间处理函数fly.fn = function(){//定义一个缓存量,存放已经定义的命令空间var o = {},//缓存数组,存放多级的命名空间d;//循环参数列表for(var i in arguments){//如果参数中有“.”,也就是说是多级的,需要先一级一级的从前往后定义。//如fly.a.b.c就是4级的,得到一个[“fly”,“a”,“b”,“c”]的数组。d = arguments[i].split(".");//引入全局变量,首先把第一个参数作为全局变量,如果已经定义了就使用原来的,没有则设置为{}o = global[d[0]] = global[d[0]] || {};//从第二个开始循环,把数组中后一个参数作为前一个参数的变量//例如[“fly”,“a”,“b”,“c”],a就是fly变量的子变量,b是a的子变量,以此类推。for(var j in d.slice(1)){var index = parseInt(j) + 1;o = o[d[index]] = o[d[index]] || {};}}};console.log("start......");//传入所个参数fly.fn("jing.a.b.c","test.a.b.c");console.log("end......");//定义两个含命名空间的函数jing.a.b.c = function(){console.log("Test fly.fn('jing.a.b.c');");}test.a.b.c = function(){console.log("Test fly.fn('test.a.b.c');");}//测试jing.a.b.c();test.a.b.c();
2、像jQuery一样使用$
//定义全局变量var _global = global || window;(function(a,undefined){var jQuery = (function(){var jQuery = function(selector, context){var context = context || {};return context.indexOf(selector);};return jQuery;})();//把自定义的变量返回给全局a.jQuery = a.$ = jQuery;})(_global);//传入全局变量//测试,查询c在abc中的位置console.log($("c","abc"));以上函数是模拟jQuery$符号的使用,作用就是查询一个字符在另一个字符中的位置。
3、像extjs一样实现继承
// 使用原型赋值方式 function extend(Child, Parent) { // 申明一个临时空对象 var Temp = function () { }; // 把父对象的原型赋值给临时对象原型 Temp.prototype = Parent.prototype; // 然后再把子对象的原型赋值为临时对象 Child.prototype = new Temp(); // 最后指定子对象的原型构造函数为子对象自己(在子对象原型被临时对象赋值后,子对象的原型的构造函数其实是临时对象了,需要改正回来) Child.prototype.constructor = Child; // 保存一个对象,存放父对象的原型。这样子对象就可以直接调用父对象里面的方法了 Child.up = Parent.prototype; } // 使用原型拷贝方式 function extend2(Child, Parent) { // 获取父对象原型 var p = Parent.prototype; // 获取子对象原型 var c = Child.prototype; // 循环拷贝 for (var i in p) { c[i] = p[i]; } // 保存一个对象,存放父对象的原型。这样子对象就可以直接调用父对象里面的方法了 c.up = p; }
0 0
- JS技巧
- js技巧
- js 技巧
- JS技巧
- js技巧
- js技巧
- JS技巧
- js技巧
- js 技巧
- js技巧
- Js技巧
- js技巧
- JS技巧
- JS技巧
- JS技巧
- js技巧
- js技巧
- JS技巧
- 常用正则表达式
- FreeMarker使用笔记
- cocos2d-x 资源搜索路径 addSearchPath addSearchResolutionsOrder
- InputMethodManager键盘控制
- sql server 实验5.2 触发器的建立与使用
- JS技巧
- cmake 学习笔记(一)
- Java Web开发 之HTTP状态码整理
- Linux_虚拟机(VMware)安装
- POI 生成Excel表格 设置单元格保护
- Windows下安装MySQL解压版
- Android 4.0 Launcher2源码分析—桌面快捷图标的拖拽
- [Java学习小记]使用PropertyChangeSupport来监听变量的变化
- 没有什么不可以的!