JS干货--命名空间与链式编程
2016-11-03 18:40
232 查看
命名空间(namespace)
相信会Java的同学,对于命名空间并不会陌生。 我们来看看JavaScript中如何实现命名空间: 简单的的实现: var MYAPP = {};//显然这样不是很优雅(^_^) 换成这样: if(typeof MYAPP === "undefined") { var MYAPP = {}; } or: var MYAPP = MYAPP || {}; 现在我们是不是要用个方法来扩展我们的命名空间了: var MYAPP = MYAPP || {}; MYAPP.namespace = function(str) { var arr = str.split('.'), i, max, parent = MYAPP, temp; if(arr[0] === "MYAPP") { arr = arr.slice(1); } for(i = 0,max = arr.length; i < max; i++) { if(typeof parent[arr[i]] === "undefined") { parent[arr[i]] = {}; parent = parent[arr[i]]; } } } MYAPP.namespace('base.utils'); MYAPP.namespace('com.goodsInfo') 但是我去查了一下JQuery、Underscore的源码,它们并不是这样处理的(原理是一样的)。 underscore.js: (function(){ this._ = function() { console.log("underscore"); } }.call(this)); 这是underscore里面的命名空间,知道call方法,应该多能看懂吧。 但是这里有个小问题,这也是你为啥会看到很多下面这种写法: !(function(){}.call(this)); +(function(){}.call(this)); 如何你在引入Underscore之前的代码的最后没有加上; 会导致编译出错。 所以让你看不懂的这些特殊符号起到这个作用。 有兴趣的可以看看jquery的实现方法。
链式编程
经常用JQuery的同学,应该对链式编程很熟悉,那种酸爽。。。 其实它的原理很简单,就很在它的方法结束的时候返回自己的指向,也就是this。 举个栗子: if(typeof Function.prototype.method === 'undefined') { Function.prototype.method = function(name, fn) { this.prototype[name] = fn; return this; } } var People = function (options) { options = options || {}; this.name = options.name || 'default'; }. method('getName', function() { return this.name; }). method('setName', function(name) { this.name = name; return this; }); var p1 = new People(); p1.setName('dai').getName() // 'dai' 这是一个简单的链式调用,如果你想深究的话,可以研究研究JQuery中的链式调用。
相关文章推荐
- js高级编程中命名空间的两种用法
- js高级编程中命名空间的两种用法
- 一段经典的js命名空间创建和链式调用代码
- 命名空间和模块化编程3 - C++快速入门41
- (转)在Js中应用命名空间
- 多个 JS 文件共享一个命名空间
- JavaScript 编程引入命名空间
- JavaScript 编程引入命名空间 - Dnew.cn - New Technol Union
- 命名空间和模块化编程2 - C++快速入门40
- javascript 使用命名空间编程2
- c#【1】 串口编程:类名和命名空间是什么?有几个重要参数、并简述?
- 关于JS的顶级,多级命名空间的一些心得
- JavaScript 编程引入命名空间的方法
- 给你的JS类库加上命名空间和扩展方法:jutil第一次重构
- 命名空间和模块化编程 - C++快速入门39
- SPORE,一个很好的实现JS命名空间的管理,模块的定义,与自动加载依赖模块的脚本文件
- C#2005 .NET3.0高级编程学习笔记————命名空间
- JavaScript 编程引入命名空间的方法与代码
- .NET Framework类库基础编程命名空间
- js中定义自己的命名空间