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 に答える