2

YUI3 库源代码中:

if (typeof YUI != 'undefined') {
    YUI._YUI = YUI;
}

为什么它需要将自己分配给现有自我的成员变量(如果它已经存在)?

更新:jQuery [2] 也使用这种方法

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,

[2] https://github.com/jquery/jquery/blob/master/src/core.js

4

1 回答 1

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对象中。

于 2013-05-23T17:05:14.057 回答