欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

自定義require函數(shù)讓瀏覽器按需加載Js文件

 更新時間:2016年11月24日 10:19:44   投稿:daisy  
可能很多人看到這個題目就會想到LABjs、RequireJS、SeaJS... 這些庫,但無奈小編沒用過這些庫,什么 AMD 、CMD 哪來那么多術(shù)語... 前端的庫太多了,要看各種亂七八糟的文檔,好難啊,還不如自己寫一個庫呢。于是就有了這文章,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

本文介紹的是自定義require函數(shù)讓瀏覽器實(shí)現(xiàn)按需加載Js文件,那到底要怎么自己寫一個按需加載的庫呢

為了實(shí)現(xiàn)按需加載:

//這是我們要實(shí)現(xiàn)的功能,require('str.js')時加載str.js文件,并創(chuàng)建一個叫str對象,等加載完畢之后執(zhí)行str對象的ready方法里的函數(shù)。

var str = require('str.js');

str.ready(show);

//要執(zhí)行的函數(shù)

function show(res){

 console.log(res);

}

//str.js 文件,提供"我是str"字符串

//require.js 這個是我們要寫的庫

實(shí)現(xiàn)思路

1、如何加載str.js文件呢?

     A:我們可以插入一個<script src="str.js"></script> ,這樣不僅加載了str.js,里面的代碼還可以被瀏覽器自動運(yùn)行呢。

2、如何判斷str.js文件已經(jīng)加載完畢?

     A:可以在str.js文件里執(zhí)行一個函數(shù),通知大家,我已經(jīng)加載完了。

3、require('str.js')返回一個對象,這個對象要怎么和str.js相關(guān)聯(lián)呢?

     A:我們可以創(chuàng)建一個叫JS['str.js']的對象,使str指向這個對象就行了。

4、我不想把代碼都寫進(jìn)一個ready里面,我要寫在很多個ready里面,加載完之后它們都能執(zhí)行嗎?

     A:不管多少個ready,沒加載完的時候,都會丟進(jìn)一個隊列里面先保存著,所以我們需要一個隊列。

5、加載完的那個時刻觸發(fā)ready,那加載完之后我再寫的ready函數(shù),就不執(zhí)行嗎?

     A:也會執(zhí)行,所以,在加載完的那個時刻,我們將重寫ready函數(shù)。

6、這么多東西20行代碼能完成嗎?

     A:....

執(zhí)行方案

根據(jù)上訴思路,寫了一個require.js文件:

function require(path){

 //比如我們require('js/str.js') , 我們需要獲取'str.js'這個文件名
 var filename = path.split('/');
 filename = filename[filename.length-1];

 JS[filename]={
  fn:[/*這個就是(4)中提到的那個隊列*/],

  //這是(2)中提到的方法,str.js文件里面執(zhí)行這個方法就代表它加載完了
  ready:function(){
  
   JS[filename].fn.forEach(function(fn){
    //JS['str.js'].export就是str.js要提供的東西:'我是str'
    fn(JS[filename].export);
   });

   //這是(5)中提到的,ready函數(shù)的重寫
   JS[filename].rt.ready = function(fn){
    fn(JS[filename].export);
   };
  },
  rt:{
   ready:function(fn){JS[filename].fn.push(fn)}//這個就是str對象的ready函數(shù)
  }
 };

 //這是(1)中提到的插入script標(biāo)簽
 var script = document.createElement('script');
 script.src = path;
 document.head.appendChild(script);

 //這是(3)中要返回的對象
 return JS[filename].rt;
}

接下來,就差str.js的寫法了:

/*

 這里你想寫什么代碼都行,推薦寫在閉包里,以免污染全局變量

*/
JS['str.js'].export = '我是str';//這個是供大家使用的參數(shù)
JS['str.js'].ready();//執(zhí)行這個函數(shù),通知大家,str.js加載完畢了

確認(rèn)一下執(zhí)行結(jié)果

<!DOCTYPE html>
<script src="require.js"></script>
<script>
 var str = require('str/str.js');
 str.ready(show);

 setTimeout(function(){
  str.ready(show);
 },3000);

 //要執(zhí)行的函數(shù)
 function show(res){
  console.log(res);
 }
</script>

ok,一切正常。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • web 屏蔽BackSpace鍵實(shí)例代碼

    web 屏蔽BackSpace鍵實(shí)例代碼

    在web端,輸入的時候,很容易在文本框消失焦點(diǎn)的時候,點(diǎn)擊退格鍵,頁面就回退了,下面是一種屏蔽頁面回退鍵的方法,一起看看吧
    2016-12-12
  • JavaScript判斷變量是否為undefined的兩種寫法區(qū)別

    JavaScript判斷變量是否為undefined的兩種寫法區(qū)別

    這篇文章主要是對JavaScript判斷變量是否為undefined的兩種寫法區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 實(shí)例解析Array和String方法

    實(shí)例解析Array和String方法

    本文主要對Array和String方法進(jìn)行總結(jié),每一部分總結(jié)后有實(shí)例代碼,代碼中黃色框方法不改變原數(shù)組。PS:所有實(shí)例結(jié)果均一一運(yùn)行所得。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • JavaScript canvas實(shí)現(xiàn)流星特效

    JavaScript canvas實(shí)現(xiàn)流星特效

    這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)流星特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 用javascript代替marquee的滾動字幕效果代碼

    用javascript代替marquee的滾動字幕效果代碼

    用javascript代替marquee的滾動字幕效果代碼...
    2007-04-04
  • 詳解webpack import()動態(tài)加載模塊踩坑

    詳解webpack import()動態(tài)加載模塊踩坑

    這篇文章主要介紹了詳解webpack import()動態(tài)加載模塊踩坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • JS使用正則表達(dá)式除去字符串中重復(fù)字符的方法

    JS使用正則表達(dá)式除去字符串中重復(fù)字符的方法

    這篇文章主要介紹了JS使用正則表達(dá)式除去字符串中重復(fù)字符的方法,以一個簡單實(shí)例分析了JavaScript中正則過濾的相關(guān)使用技巧,需要的朋友可以參考下
    2015-11-11
  • 原生JS使用Canvas實(shí)現(xiàn)拖拽式繪圖功能

    原生JS使用Canvas實(shí)現(xiàn)拖拽式繪圖功能

    這篇文章主要介紹了原生js實(shí)現(xiàn)Canvas實(shí)現(xiàn)拖拽式繪圖,支持畫筆、線條、箭頭、三角形和圓形等等圖形繪制功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-06-06
  • JavaScript深拷貝與淺拷貝原理深入探究

    JavaScript深拷貝與淺拷貝原理深入探究

    深拷貝和淺拷貝是面試中經(jīng)常出現(xiàn)的,主要考察對基本類型和引用類型的理解深度,這篇文章主要給大家介紹了關(guān)于js深拷貝和淺拷貝的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • JavaScript Date對象詳解

    JavaScript Date對象詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript Date對象,介紹 Date 日期和時間對象的操作,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論