国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue.use源碼分析

2024-05-06 15:18:13
字體:
來源:轉載
供稿:網友

我想有過vue開發經驗的,對于vue.use并不陌生。當使用vue-resource或vue-router等全局組件時,必須通過Vue.use方法引入,才起作用。那么vue.use在組件引入之前到底做了那些事情呢?讓我們一窺究竟。

先上vue.use源碼

// javascript的方法是可以傳遞的,哈哈Vue.use = function (plugin) {  /* istanbul ignore if */  if (plugin.installed) {   return  }  // additional parameters  var args = toArray(arguments, 1);  args.unshift(this);  if (typeof plugin.install === 'function') {   plugin.install.apply(plugin, args);  } else if (typeof plugin === 'function') {   plugin.apply(null, args);  }  plugin.installed = true;  return this };

假設我們通過Vue.use引入一個插件plugin(該插件可以暫時理解為一個變量或參數),即Vue.use(plugin); 

首先判斷傳入的參數plugin的屬性installed是否存在,如果存在且邏輯值為真,那么直接返回,后邊的代碼就不會再執行,這個判斷的作用是什么呢?后邊會講到。 

我們先假設plugin的屬性installed不存在或為假,那么繼續往下執行。

var args = toArray(arguments, 1);

//執行了一個toArray方法,toArray接收了兩個參數,arguments為Vue.use方法傳入的參數集合,例如Vue.use(a,b,c),那么arguments類似于[a,b,c](說明:arguments只是類數組,并不是真正的數組)。此處因為只引入一個參數plugin,所以arguments類似于[plugin]。

toArray的作用是什么呢?看源碼。

function toArray (list, start){ start = start || 0; var i = list.length - start; var ret = new Array(i); while (i--) { ret[i] = list[i + start]; } return ret}

當執行toArray(arguments,1),會生成一個新數組ret,長度 = arguments.length-1,然后進行while循環,依次倒序把arguments的元素賦值給ret,因為ret比arguments長度少1,所以最終等同于arguments把除了第一個元素外的其余元素賦值給ret。toArray主要作用就是把類數組轉化為真正的數組,這樣才能調用數組的方法。因為此處我只引入一個plugin參數,即arguments=[plugin],所以toArray返回為空數組[]。

接著往下執行,args.unshift(this),等同于[].unshift(Vue),即args = [Vue];然后執行

if (typeof plugin.install === 'function') {  plugin.install.apply(plugin, args); } else if (typeof plugin === 'function') {  plugin.apply(null, args); }

此處判斷plugin的install是否為函數,如果為函數,立即執行pluign.install方法,install方法傳入的參數為args內數組元素,即install接受的第一個參數為Vue.

如果plugin的install不是函數,那么判斷plugin本身是否為函數,如果為函數,那么執行plugin函數,且參數為args內數組元素。

最后設置plugin.installed為true。設置plugin.installed為true的作用是避免同一個插件多次執行安裝,比如Vue.use(plugin)執行一次之后,installed為true,再次執行的話走到第一步判斷就返回了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 定远县| 盐亭县| 儋州市| 清涧县| 永川市| 赞皇县| 通江县| 济源市| 盐津县| 太原市| 松阳县| 德钦县| 昌黎县| 太仆寺旗| 周口市| 永和县| 静宁县| 绿春县| 怀仁县| 寿光市| 鄂温| 蓬莱市| 马公市| 宁安市| 永登县| 和平县| 黄陵县| 平罗县| 历史| 丰台区| 江津市| 长宁区| 巴林右旗| 英德市| 和林格尔县| 昭通市| 遵化市| 新营市| 卓资县| 永嘉县| 繁昌县|