博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS框架设计之命名空间设计一种子模块
阅读量:6305 次
发布时间:2019-06-22

本文共 1134 字,大约阅读时间需要 3 分钟。

命名空间

1、种子模块作为一个框架的最开始,除了负责初始化框架的最基础部分。

2、种子模块作为框架的最开始,那么什么是种子框架的最开始呢?答案是IIFE(立即调用函数表达式);

IIFE(立即调用函数表达式)是现代Javascript框架最主要的基础设施,它像细胞膜一样包裹着整个框架,放置外部框架的变量污染。

3、众所周知,大多数框架在windows中立足是通过命名空间,基本上我们可以把命名空间看成是框架的名字,当然也有一些框架没有命名空间向Prototype.js,mootools等都有污染的问题,他的意义存在与整个执行环境的每个角落。

4、Javascript的一切都是基于对象的,而Javascript通过复合类型的对象来构建命名空间比如:function,regexp,object等,我们往一个对象上添加一个属性,而这个属性又是一个对象,而对这个对象我们又可以给他添加一个对象,通过这种方法我们可以有条不紊的构建我们的框架,用户想调用摸个方法就通过XX.YYY.ZZZZ()来调用。基本代码如下:

 

5、众观各大类库的实现,一开始都是以一个全局变量作为命名空间,然后对这个全局变量进行扩展,如Base2的Base,jQuery的jQuery。

 

6、全局变量的污染

全局变量的污染主要分两类

(1)对js原生对象的污染、Prototype,mootools和Base2归为一类,Prototype的原理是对Javascript对象进行扩展,但是他没有考虑到和其他库的兼容性问题,在Prototype的基础上

,而且有点渊源的插件几乎都和Prototype有关,mootools是Prototype的升级版,更加的oo,全面复制其API,Base则想修复IE的bug,让IE拥有标准浏览器的API,因此也把很多的原生对象给污染了

 (2)对原生对象几乎没有污染、向jQuery、YUI、EXT这些框架,YUI和EXT就是想上面给出代码那样,一叠罗汉的方式构建的,jQuery则另辟蹊径,他以选择器为向导,所以他的命名空间是一个函数,方便用户把css选择器字符串传进来,然后通过选择器引擎进行查找,最后返回一个jQuery实例。

 

7、jQuery(命名空间)多库共存问题

因为jQuery最初也是非常弱小的,它想人家使用自己的框架,他也想Prototype那样使用$符作为命名空间。所以通过noConflict()这个方法实现了多库共存问题的解决,具体参考本人

注意:这个方案只解决单文件js类库框架的多库共存问题,向EXT这类多文件js类库并不能解决

 

转载于:https://www.cnblogs.com/GreenLeaves/p/6371175.html

你可能感兴趣的文章
Some Sites About .Net
查看>>
ADB Server Didn’t ACK ,failed to Start Daemon 解决方法
查看>>
linux下cacti一键自动安装脚本(适用于centos、redhat)-【原创】
查看>>
1分钟掌握和女生约会的聊天方式
查看>>
【Android 学习】四大组件(三)——Content Provider
查看>>
Spring系列(五) 容器初始化过程源码
查看>>
Adndroid 6.0、7.0适配
查看>>
每日文献:2018-01-04
查看>>
HBase原理及实践(原创)
查看>>
Java并发编程的艺术(十一)——线程池(2)
查看>>
基于 Github Issues 的单页面静态博客
查看>>
树莓派 之 dnsmasq搭建DNS服务器
查看>>
Spring Cloud云服务架构 - commonservice-eureka 项目过程构建
查看>>
智能语音自学习平台震撼发布!
查看>>
大咖 | 美国工程院院士Glynn:基于数据的决策,仿真与库存管理(附PPT下载)...
查看>>
使用Ldoc给Lua生成文档
查看>>
Vant Weapp 0.5.11 发布,有赞小程序 UI 组件库
查看>>
hexo博客评论新神器——Valine
查看>>
Oh-My-Zsh!提高你CLI(Command-line interface )的神奇工具 - Ubuntu教程
查看>>
SwaggerBootstrapUi 1.9.0 发布,提供Swagger资源保护
查看>>