专栏首页GreenLeavesJS框架设计之命名空间设计一种子模块

JS框架设计之命名空间设计一种子模块

命名空间

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

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

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

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

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

<script>
alert(typeof(typeof(Test)));//输出:string
alert(typeof(Test));//输出:undefined  字符串形式

//所以判断一个对象的类型用===并和要判断的对象的字符串形式进行比较
if(typeof(Test)==="undefined"){
   Test={};
   Test.Function={};
   Test.Class={};
   Test.Array={};
   Test.JSONP=new Test.Class();
   Test.XHR=new Test.Array();
}
</script>

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()这个方法实现了多库共存问题的解决,具体参考本人jQuery多库共存解决方案

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript之面向对象学习四原型对象的动态性

    1、由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来---即便是先创建了实例后修改原型也是如此。代码如下: fun...

    郑小超.
  • JavaScript引用类型之Array类型一

    一、简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了。下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: ...

    郑小超.
  • Vue.js系列之二Vue实例

    每个Vue应用都是通过Vue函数创建一个新的Vue实例开始,代码如下: var vm=new Vue({}); {}是创建Vue应用时的参数对象 1、Vue实例...

    郑小超.
  • kui 组件化库思路(来啦,老弟,持续更新哦,部署gitpages,添加issue)

    今天暂时不更新 flask 教程了,今天专门写一篇文章来介绍一下今天搞了一天的 kui 组件化学习库的思路,其实隐隐约约都有一种感觉,想拥有自己的一个组件化学习...

    公众号---志学Python
  • Hadoop离线数据分析平台实战——380MapReduce程序优化Hadoop离线数据分析平台实战——380MapReduce程序优化

    Hadoop离线数据分析平台实战——380MapReduce程序优化 项目进度 模块名称 完成情况 用户基本信息分析(MR)� 完成 浏览器信...

    Albert陈凯
  • 招募高校项目负责团队|这里有一份最全T-Star高校挑战赛报名攻略

    ? ? 上周,腾讯网络安全T-Star高校挑战赛正式启动报名了!!!详情请点击:启动推文 活动公告发出后,已经有多位小伙伴主动联系小编,并自告奋勇成为高校项...

    腾讯高校合作
  • DeepFake 新高度:一阶运动模型让“万物皆可动”

    DeepFake一方面被骂作“AI毒瘤”,另一方面在B站上大行其道。最近,这项技术又用在了在线视频会议身上。

    AI科技评论
  • 你是真的了解多态吗?谈谈你对多态的了解以及应用

    现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

    Java学习
  • 如果女朋友和VR同时掉水里,你先救谁?

    VRPinea
  • 深度解析Kubernetes Local Persistent Volume(一)

    摘要:本文分析了hostPath volume缺陷,然后对local persistent volume的使用场景、基本的工作机制进行了分析,介绍了使用时的注意...

    Walton

扫码关注云+社区

领取腾讯云代金券