if (typeof YUI != 'undefined') {
YUI._YUI = YUI;
}
为什么需要将自己分配给现有self的成员变量(如果已经存在)?
更新:jQuery [2]也使用这种方法
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
[2] https://github.com/jquery/jquery/blob/master/src/core.js
答案 0 :(得分:4)
YUI和jQuery以不同的方式完成它,但出于同样的原因:尝试保持工作,以防你多次加载库。
jQuery提供jQuery.noconflict()
,将jQuery
和$
个全局变量恢复为之前的值。所以你可以安全地做到这一点:
<script src="jquery-1.9.js"></script>
<script>/* use jQuery */</<script>
<script src="jquery-1.8.js"></script>
<script>
(function ($) {
// up here $ is jQuery 1.8
}(jQuery.noconflict());
// down here $ is jQuery 1.9
</script>
YUI不提供noconflict
机制,但它会尝试保持运行。该库在YUI.Env
对象中保留一些全局状态。如果替换了该对象,则引用YUI.Env
的先前加载的组件的状态将中断,因此YUI将旧的_YUI.Env
复制到新的Env
对象中。