开发者社区> 异步社区> 正文

《JavaScript框架设计》——1.6 无冲突处理

简介: 本节书摘来自异步社区《JavaScript框架设计》一书中的第1章,第1.6节,作者:司徒正美 更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.6 无冲突处理 无冲突处理也叫多库共存。不得不说,$是最重要的函数名,这么多框架都爱用它做自己的命名空间。
+关注继续查看

本节书摘来自异步社区《JavaScript框架设计》一书中的第1章,第1.6节,作者:司徒正美 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 无冲突处理

无冲突处理也叫多库共存。不得不说,$是最重要的函数名,这么多框架都爱用它做自己的命名空间。在jQuery还比较弱小时,如何让人们试用它呢?当时Prototype是主流,jQuery于是发明了noConflict函数,下面是源代码:

var
        window = this,
        undefined,
        _jQuery = window.jQuery,
        _$ = window.$,
        //把window存入闭包中的同名变量,方便内部函数在调用window时不用费大力气查找它
        //_jQuery与_$用于以后重写
        jQuery = window.jQuery = window.$ = function(selector, context) {
    //用于返回一个jQuery对象
    return new jQuery.fn.init(selector, context);
}
jQuery.extend({
    noConflict: function(deep) {
        //引入jQuery类库后,闭包外面的window.$与window.jQuery都储存着一个函数
        //它是用来生成jQuery对象或在domReady后执行里面的函数的
        //回顾最上面的代码,在还没有把function赋给它们时,_jQuery与_$已经被赋值了
        //因此它们俩的值必然是undefined
        //因此这种放弃控制权的技术很简单,就是用undefined把window.$里面的jQuery系的函数清除掉
        //这时Prototype或mootools的$就可以“明媒正娶”了
        window.$ = _$;//相当于window.$ = undefined
        //如果连你的程序也有一个叫jQuery的东西,jQuery可以大方地连这个也让渡出去
        //这时就要为noConflict添加一个布尔值,为true
        if (deep)
            //但我们必须用一个东西接纳jQuery对象与jQuery的入口函数
            //闭包里面的东西除非被window等宿主对象引用,否则就是不可见的
            //因此我们把闭包里面的jQuery return出去,外面用一个变量接纳就可以
            window.jQuery = _jQuery;//相当window.jQuery = undefined
        return jQuery;
    }
});

使用时,先引入别人的库,然后引入jQuery,使用调用$.noConflict()进行改名,这样就不影响别人的$运作了。

mass Framework更进一步,在引入种子模块的script标签上定义一个nick属性,那么释放出来的命名空间就是你的那个属性值。里面也偷偷实现了jQuery那种机制。

<script nick="AAA" src="mass.js"></script>
<script>
AAA.log("xxxxx")
</script>

如果你不改,默认还是$——我说过了,大家都对它“垂涎三尺”。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
软件框架设计之美
        这篇文章可以看做是Apress出版的那本&lt;&lt;软件框架设计的艺术&gt;&gt;进阶阅读。欢迎大家留言,一同分享自己的心得体会~         软件大师Robert Martin早在1994年的论文中就提到了OO设计度量准则,站在可维护性(Maintainablity),可扩展性(Extensibility),可重用性(Resuability)的角度上,提出了
920 0
Android 从零开始打造异步处理框架
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/52847872 本文出自【赵彦军的博客】 概述 封装尝试 Handler优化 线程优化 框架使用 参考资料 概述 在Andr...
716 0
15 个微型的 JavaScript 框架
问一个 Web 开发者最喜欢的 JS 库是什么,多数回答都是 jQuery,不管他所作的网站是大是小。开发者倾向使用 jQuery 的原因是它可以降低代码的复杂度、而且 jQuery 经过良好的测试,大量的用户以及很好的社区生态以及大量的插件。
604 0
基于对象存储 OSS 的智能数据分析处理框架和功能
今年参加了 2019 全球闪存峰会(Flash Memory World),分享了“基于云存储的智能数据分析处理架构”,重点介绍在对象存储 OSS 之上的数据处理功能,现整理相关内容和大家探讨。
2307 0
1. 揭秘Spring类型转换 - 框架设计的基石
你的字符串,有很多话要说
2681 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载