在 pluginhost-debug.js 中有段**:
pluginhost.plug = function(hostclass, plugin, config)其中的if是為了防止在 y.base 設定外掛程式。};
外掛程式例項初始化:
外掛程式繼承於y.plugin.base, 由於 yui3 的設計 ,y.plugin.base 繼承於 y.base ,y.base 又 augment 自pluginhost 則在 使用外掛程式時,外掛程式需要例項化,例項化時當呼叫到 y.base 的構造函函式:
function plugin(config)而 y.base的建構函式則會由於augment自pluginhost,呼叫 _initplugins 而 _initplugins 則會取得所有繼承鏈構造器:
var classes = (this._getclasses) ? this._getclasses() : [this.constructor],即: y.base ,y.plugin.base,以及當前外掛程式構造器本身,對這幾個構造器的plugins進行例項化,但是如果 y.base 有 plugins ,則在初始化 y.base的外掛程式時,又會回到本段開頭進入無限遞迴。
由上分析可知,確實不可以對 y.base 進行plug ,但是同時也看到也不能對 y.plugin.base以及外掛程式構造器進行 plug,原因同上,但是 yui3只考慮了不可以對 y.base進行 if判斷,卻沒有對y.plugin.base以及外掛程式構造器本身進行判斷,修正如下:
if (hostclass !== y.base)測試**:hostclass=original;
}
若沒有上步修正會導致無限遞迴
yui().use("base","event","node","event-simulate","event-custom","node-event-simulate","plugin","oop","pluginhost",function(y)y.extend(testplugin,y.plugin.base);
testplugin.name="testplugin";
testplugin.ns="testplugin_ns";
//plug y.plugin.base
y.plugin.host.plug(y.plugin.base,testplugin);
//plug自身
y.plugin.host.plug(testplugin,testplugin);
y.node.plug(testplugin);
//開始無限遞迴
var node=y.one("body");
console.log("done");
});
YUI3元件框架之plugin
plugin功能包括如下幾個模組,簡單分析如下 pluginhost base 維護物件 this.plugins 並提供方法 plug unplug hasplug destroyplugins initplugins plug 初始化外掛程式例項,並與host進行關聯 if plugin l.i...
YUI 3 學習筆記 queue base
今天 yui 3 發布了 beta 1,實在是高興。繼續學習原始碼 queue base.一點心得 yui3 beta1 的 yui seed,與pr1 的架構圖 已經有了稍許不同 增加了 queue base 模組。queue base 的原始碼非常簡單,就是乙個包裝後的陣列。封裝後的介面非常有 ...
YUI3學習(一) 入門
學習yui3有一段時間,並且應用在了一些小專案的前端開發中,感覺還是蠻不錯的,所以決定開始記錄下yui3的學習歷程和個人經驗。yui3在前身yui2基礎上進行了大量的重新設計,並不只是簡單的版本公升級。yui3強調 重用,將功能做了級別劃分和顆粒化的設計。在概念上抽象出 核心 工具 和元件類,分別放...