欧美精品在线一区二区三区_亚洲女同精品视频_日韩一区免费_国产欧美久久久精品免费_国产这里只有精品_僵尸再翻生在线观看_久久99精品国产一区二区三区_亚洲免费一区二区_女教师淫辱の教室蜜臀av软件_中文字幕国产一区二区

js 模塊化編程

2018-9-14    seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

了解一個技術(shù),首先要了解這個技術(shù)產(chǎn)生的背景及解決的問題,而不應(yīng)該只是單純的知道該怎么用。之前的狀態(tài)可能就是只是為了了解而了解,并不知道實際產(chǎn)生的原因及帶來的好處,所以今天就來總結(jié)一下。

1. 什么是模塊化編程

來看百度百科的定義

模塊化程序設(shè)計是指在進行程序設(shè)計時將一個大程序按照功能劃分為若干小程序模塊,每個小程序模塊完成一個確定的功能,并在這些模塊之間建立必要的聯(lián)系,通過模塊的互相協(xié)作完成整個功能的程序設(shè)計方法。

比如 java 的 import,C# 的 using。我的理解是通過模塊化編程,可以將不同的功能獨立出來,修改某個功能時不會對其他功能產(chǎn)生影響。

2. 為什么要模塊化

來看下面一個例子

// A.js function sayWord(type){ if(type === 1){
        console.log("hello");
    }else if(type === 2){
        console.log("world");
    }
} // B.js function Hello(){ sayWord(1);
} // C.js Hello()  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

假設(shè)上面三個文件,B.js 引用了 A.js 里面的內(nèi)容,C.js 又引用了 B.js 里面的內(nèi)容,如果編寫 C.js 的人只知道引用了 B.js,那他就不會引用 A.js 就會導(dǎo)致程序出錯,而且文件的引用順序也不能出錯。給整體代碼的調(diào)試修改帶來不便。

還有個問題,上述代碼暴露了兩個全局變量,容易造成全局變量的污染

3. AMD

AMD 即 Asynchronous Module Definition(異步模塊定義)。采取異步加載的方式加載模塊,模塊的加載不會影響它后面的語句執(zhí)行。而且只有用到的時候才會去加載相關(guān)文件,屬于瀏覽器端的標(biāo)準(zhǔn)

假設(shè)下面這種情況

// util.js define(function(){ return {
        getFormatDate:function(date,type){ if(type === 1){ return '2018-08-9' } if(type === 2){ return '2018 年 8 月 9 日' }
        }
    }
}) // a-util.js define(['./util.js'],function(util){ return {
        aGetFormatDate:function(date){ return util.getFormatDate(date,2)
        }
    }
}) // a.js define(['./a-util.js'],function(aUtil){ return {
        printDate:function(date){ console.log(aUtil.aGetFormatDate(date))
        }
    }
}) // main.js require(['./a.js'],function(a){ var date = new Date()
    a.printDate(date)
})
console.log(1); // 使用 // <script src = "/require.min.js" data-main="./main.js"></script>   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

頁面上先打印 1,然后才會打印 2018 年 8 月 9 日。因此 AMD 的加載并不會影響后續(xù)的語句執(zhí)行。

如果不是異步加載會出現(xiàn)什么情況呢

var a = require('a');
console.log(1) 
  • 1
  • 2

后面的語句需要等待 a 加載完成才能執(zhí)行,如果加載時間過長,整個程序都會卡在這。因此,瀏覽器不能同步加載資源,這也是 AMD 的產(chǎn)生背景。

AMD 是在瀏覽器端實現(xiàn)模塊化開發(fā)的規(guī)范。由于該規(guī)范不是 JavaScript 原始支持的,使用 AMD 規(guī)范進行開發(fā)的時候需要引入第三方的庫函數(shù),也就是 RequireJS。

RequireJS 主要解決的問題

  • 使 JS 異步加載,避免頁面失去響應(yīng)
  • 管理代碼之間的依賴性,有利于代碼的編寫和維護

下面來看看如何使用 require.js

要想使用 require.js,首先要 define

// ? 代表該參數(shù)可選 define(id?, dependencies?, factory); 
  • 1
  • 2
  • id:指的是定義的模塊的名字
  • dependencies:是定義的模塊所依賴模塊的數(shù)組
  • factory:為模塊初始化要執(zhí)行的函數(shù)或?qū)ο?。如果為函?shù),它應(yīng)該只被執(zhí)行一次。如果是對象,此對象應(yīng)該為模塊的輸出值。

    具體的規(guī)范說明可以參考 AMD (中文版) 
    舉個例子,創(chuàng)建一個名為 “alpha” 的模塊,使用了 require,exports,和名為 “beta” 的模塊:

define("alpha", ["require", "exports", "beta"], function (require, exports, beta) { exports.verb = function() { return beta.verb(); //Or: return require("beta").verb();
       }
   }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

一個返回對象的匿名模塊:

define(["alpha"], function (alpha) { return {
         verb: function(){ return alpha.verb() + 2;
         }
       };
   }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

一個沒有依賴性的模塊可以直接定義對象:

define({
     add: function(x, y){ return x + y;
     }
   }); 
  • 1
  • 2
  • 3
  • 4
  • 5

如何使用

AMD 采用 require 語句加載模塊

require([module],callback); 
  • 1
  • module:是一個數(shù)組,里面的成員是要加載的模塊
  • callback:加載成功之后的回調(diào)函數(shù)

例如

require(['./a.js'],function(a){ var date = new Date()
    a.printDate(date)
}) 
  • 1
  • 2
  • 3
  • 4

具體的使用方法如下

// util.js define(function(){ return {
        getFormatDate:function(date,type){ if(type === 1){ return '2018-08-09' } if(type === 2){ return '2018 年 8 月 9 日' }
        }
    }
}) // a-util.js define(['./util.js'],function(util){ return {
        aGetFormatDate:function(date){ return util.getFormatDate(date,2)
        }
    }
}) // a.js define(['./a-util.js'],function(aUtil){ return {
        printDate:function(date){ console.log(aUtil.aGetFormatDate(date))
        }
    }
}) // main.js require(['./a.js'],function(a){ var date = new Date()
    a.printDate(date)
}) // 使用 // <script src = "/require.min.js" data-main="./main.js"></script>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

假設(shè)這里有 4 個文件,util.js,a-util.js 引用了 util.js,a.js 引用了 a-util.js,main.js 引用了 a.js。

其中,data-main 屬性的作用是加載網(wǎng)頁程序的主模塊。

上例演示了一個主模塊最簡單的寫法,默認(rèn)情況下,require.js 假設(shè)依賴和主模塊在同一個目錄。

使用 require.config() 方法可以對模塊的加載行為進行自定義。require.config() 就寫在主模塊(main.js)的頭部,參數(shù)是一個對象,這個對象的 paths 屬性指定各個模塊的加載路徑

require.config({
    paths:{ "a":"src/a.js", "b":"src/b.js" }
}) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

還有一種方法是改變基礎(chǔ)目錄(baseUrl)

require.config({

    baseUrl: "src",

    paths: { "a": "a.js", "b": "b.js",

    }

  }); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4. CommonJS

commonJS 是 nodejs 的模塊化規(guī)范,現(xiàn)在被大量用在前端,由于構(gòu)建工具的高度自動化,使得使用 npm 的成本非常低。commonJS 不會異步加載 JS,而是同步一次性加載出來

在 commonJS 中,有一個全局性的方法 require(),用于加載模塊,例如

const util = require('util'); 
  • 1

然后,就可以調(diào)用 util 提供的方法了

const util = require('util'); var date = new date();
util.getFormatDate(date,1); 
  • 1
  • 2
  • 3

commonJS 對于模塊的定義分三種,模塊定義(exports),模塊引用(require)和模塊標(biāo)示(module)

exports() 對象用于導(dǎo)出當(dāng)前模塊的變量或方法,唯一的導(dǎo)出口。require() 用來引入外部模塊。module 對象代表模塊本身。

舉個栗子

// util.js module.exports = {
    getFormatDate:function(date, type){ if(type === 1){ return '2017-06-15' } if(type === 2){ return '2017 年 6 月 15 日' }
    }
} // a-util.js const util = require('util.js')
module.exports = {
    aGetFormatDate:function(date){ return util.getFormatDate(date,2)
    }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

或者下面這種方式

 // foobar.js // 定義行為 function foobar(){ this.foo = function(){ console.log('Hello foo');
        } this.bar = function(){ console.log('Hello bar');
          }
 } // 把 foobar 暴露給其它模塊 exports.foobar = foobar; // main.js //使用文件與模塊文件在同一目錄 var foobar = require('./foobar').foobar,
test = new foobar();
test.bar(); // 'Hello bar' 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

5. ES6 Module

ES6 模塊的設(shè)計思想是盡量靜態(tài)化,使得編譯時就能確定模塊的依賴關(guān)系,以及輸入和輸出的變量,而 CommonJS 和 AMD 模塊都只能在運行時確定這些關(guān)系。如 CommonJS 加載方式為 “運行時加載”,ES6 的加載方式為 “編譯時加載” 或者靜態(tài)加載,即 ES6 可以在編譯時就完成模塊加載,效率比 CommonJS 模塊的加載方式高。

ES6 模塊自動采用嚴(yán)格模式,不管有沒有在模塊頭部加上 “use strict”。

ES6 export 語句輸出的接口與其對應(yīng)的值是動態(tài)綁定關(guān)系,即通過該接口可以取到模塊內(nèi)部實時的值。而 CommonJS 模塊輸出的是值的緩存,不存在動態(tài)更新。

ES6 與 CommonJS 模塊的差異

  • CommonJS 模塊輸出的是一個值的復(fù)制,ES6 模塊輸出的是值的引用。
  • CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口。
  • CommonJS 中的 this 指向當(dāng)前模塊,ES6 模塊 this 為 undefined

第二個差異是因為 CommonJS 加載的是一個對象(即 Module.exports 屬性),該對象只有在腳本運行結(jié)束時才會生成,而 ES6 模塊不是對象,它的對外接口只是一種靜態(tài)定義,在代碼靜態(tài)解析階段就會生成。

總結(jié)

CommonJS 采用了服務(wù)器優(yōu)先的策略,使用同步方式加載模塊,而 AMD 采用異步加載的方式。所以如果需要使用異步加載 js 的話建議使用 AMD,而當(dāng)項目使用了 npm 的情況下建議使用 CommonJS。

藍(lán)藍(lán)設(shè)計www.ocunn.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)


日歷

鏈接

個人資料

存檔

欧洲杯什么时候开赛| 国产精品视频123| 国产三级在线| 欧美三级美国一级| 国产精品免费看片| 久久综合久久美利坚合众国| 91成人在线视频观看| 国产亚洲精品成人| 美女网站视频在线| 男女精品视频| 欧美三级日韩三级国产三级| 97人人干人人| 中文字幕在线免费看线人| 欧美18一12sex性处hd| 亚洲专区视频| 亚洲欧美一区二区不卡| 午夜精品视频在线| 欧美大尺度做爰床戏| 国产a级免费视频| 草莓视频一区二区三区| 久久精品视频在线免费观看| 不卡av电影院| 欧美xxxxx在线视频| 亚洲一二区视频| 国产精品亚洲四区在线观看| 91污在线观看| 久久综合久久88| 欧美在线观看视频网站| 亚洲第一天堂在线观看| 日韩中出av| 亚洲欧美日韩中文字幕一区二区三区| 26uuu亚洲伊人春色| www.超碰97.com| 黄页网址在线观看| 婷婷亚洲综合| 欧美在线看片a免费观看| 国产精品久久久久久久小唯西川| 极品久久久久久久| 在线观看h网| 老司机一区二区| 亚洲人永久免费| 91专区在线观看| 亚洲黄色一级大片| 精品大片一区二区| 欧美色xxxx| 国产一级特黄a大片99| 三级影片在线看| 欧美aaa大片视频一二区| 成人av资源在线观看| 欧美日韩国产91| 91精品视频国产| 青青草在线免费视频| 亚洲国产日韩在线| 精品电影一区二区三区 | 国模套图日韩精品一区二区| 成人性生交大片免费看中文| 欧美成人午夜激情在线| 911福利视频| 岛国在线视频免费看| 久久久久久色| 亚洲一区二区黄| 亚洲最大综合网| 日韩欧美在线番号| 亚洲女人av| 亚洲图片欧美日产| 青青草精品视频在线观看| 三上悠亚在线免费观看| 亚洲经典三级| 精品一区二区电影| 日韩在线第三页| 免费国产在线视频| 日本不卡在线视频| 日韩少妇与小伙激情| 亚洲黄色片免费| 色视频在线免费观看| 精品一区二区三区在线观看| 久久久精品国产亚洲| 日本少妇激三级做爰在线| 日韩av中文| 国产iv一区二区三区| 久久久久久噜噜噜久久久精品| 美女久久久久久久久| 不卡av免费观看| 久久久久久久久99精品| 国产欧美久久久久久| 中文字幕在线观看成人| 日韩欧美中文字幕在线视频| 午夜成人免费视频| 日韩欧美手机在线| 国内精品国产成人国产三级| 欧美日韩国产精品一区二区亚洲| 亚洲精品在线电影| 日本va中文字幕| 色综合久久影院| 99久久99久久久精品齐齐| 国产精品99一区| 人妻久久一区二区| ccyy激情综合| 欧美日韩亚洲综合一区二区三区 | 国产精品人妻一区二区三区| 欧美r级电影| 日韩电影中文字幕在线| 欧美激情第3页| 免费男女羞羞的视频网站在线观看| 91视频免费观看| 91视频国产一区| 国产99久久久久久免费看| 99久久国产综合精品成人影院| 亚洲第一精品久久忘忧草社区| 亚洲久久中文字幕| 激情av在线| 中文字幕制服丝袜成人av| 裸模一区二区三区免费| 国产三级按摩推拿按摩| 国产日韩欧美一区| 欧美成人精品在线视频| 欧美巨胸大乳hitomi| **爰片久久毛片| 欧美精品乱人伦久久久久久| 日韩精品一区中文字幕| 在线āv视频| 最新国产の精品合集bt伙计| 欧美精品与人动性物交免费看| 亚洲黄色小说网| 免费一级欧美片在线观看| 午夜精品久久久久久久白皮肤 | 十八禁视频网站在线观看| 天堂av中文在线| 亚洲人成精品久久久久久| 亚洲精品国产精品国自产观看| 天天综合天天色| 国产伦精品一区二区三区免费| 国产精品免费久久久久久| 69xxxx国产| av成人激情| 456国产精品| 国产精品免费精品一区| 午夜欧美精品| 欧美黄色三级网站| 国产亚洲自拍av| 亚洲天堂免费| 欧美成人sm免费视频| 黄色一级大片在线免费观看| 精品欧美久久| 中文字幕亚洲欧美在线| 少妇视频在线播放| 怕怕欧美视频免费大全| 亚洲午夜av久久乱码| 手机看片福利视频| 婷婷精品视频| 在线观看欧美www| 免费91在线观看| 不卡在线一区| 久久精品国产电影| 免费三片在线播放| 国产综合网站| 68精品久久久久久欧美| 成人a v视频| 视频在线观看一区二区三区| 国产精品直播网红| 亚洲成人久久精品| 国产不卡视频在线观看| 精品久久久久久综合日本| 粉嫩tv在线播放| 久久青草欧美一区二区三区| 亚洲国产精品123| 日本高清在线观看wwwww色| 亚洲欧美日韩久久| 国产 日韩 亚洲 欧美| 国产在线观看www| 在线精品国精品国产尤物884a| 日本xxxx黄色| 高清一区二区三区av| 亚洲精品福利在线| 免费黄色在线网址| 91精品国产91久久久久久密臀 | 艳色歌舞团一区二区三区| 天堂а√在线资源在线| 午夜激情一区二区三区| www.com黄色片| 美女精品视频在线| 亚洲精品一区二区在线| 精品国产视频在线观看| 亚洲天堂偷拍| 国产精选久久久久久| 日本免费一区视频| 久久久国产精品午夜一区ai换脸| 中国一级大黄大黄大色毛片| 久久99亚洲网美利坚合众国| 欧美日韩精品一区二区三区蜜桃| 亚洲午夜久久久久久久久| 亚洲精品aaaaa| 精品少妇v888av| 国产裸体美女永久免费无遮挡| 精品一区二区国语对白| 日韩精彩视频| 欧美色图天堂| 91精品在线观看入口| 五月天综合视频| 欧美69视频| 国产欧美一区二区三区在线看| 五十路在线视频| 综合久久一区二区三区| 日韩一级理论片| 国内毛片久久| 色综合久久88色综合天天看泰| 中文字幕+乱码+中文| 粉嫩嫩av羞羞动漫久久久| 在线国产99| 日韩福利一区| 亚洲欧美成人一区二区在线电影| 18精品爽视频在线观看| 免费高清在线视频一区·| 欧美一区激情视频在线观看| 91蜜桃在线视频| 欧美一区二区三区四区五区| 少妇视频一区二区| 久久亚洲欧洲| 日韩欧美手机在线| 中文字幕在线看片| 亚洲欧美日韩高清| 区一区二在线观看| 不卡的看片网站| 成人黄色av片| 超碰cao国产精品一区二区| 欧美高清在线视频观看不卡| 午夜精品久久久久久久第一页按摩 | 最爽无遮挡行房视频在线| 日韩一区二区三区四区五区六区| 久久99久久99精品免费看小说| 久久精品男女| 日韩wuma| 亚洲电影有码| 久久亚洲国产精品成人av秋霞| 国产剧情久久久| 中文字幕一区二区三区蜜月| 欧美国产在线一区| 亚洲先锋影音| 好吊色欧美一区二区三区| 午夜dj在线观看高清视频完整版| 日韩欧美你懂的| 一区二区三区视频免费看| 成人黄色综合网站| 久久久久久久久久久免费视频| 欧美一区 二区| 国产精品88a∨| а天堂8中文最新版在线官网| 777a∨成人精品桃花网| 国产乡下妇女做爰视频| 成人一级视频在线观看| 18岁视频在线观看| 欧美天天综合| 91嫩草视频在线观看| 欧美videossex另类| 亚洲三级av在线| 国产三级按摩推拿按摩| 亚洲在线中文字幕| 久久精品视频18| 男女男精品视频网| 国产欧美日韩网站| 亚洲欧洲色图| 99国内精品久久久久久久软件| 欧洲一区二区三区| 在线观看日韩欧美| 日韩中文字幕免费观看| 色综合一个色综合亚洲| 国语对白在线播放| 不卡一区二区中文字幕| 欧美伦理片在线观看| 欧美精品播放| 亚洲成人一区二区三区| 麻豆国产一区| 国产精品视频一| 欧美人与性动交α欧美精品济南到 | 中文字幕第100页| 欧美视频在线观看| 亚洲一区二区三区涩| youjizzjizz亚洲| 国产精品最新在线观看| av影视在线看| 欧美成人免费全部| 欧洲免费在线视频| 欧美精品一区二| 国产精品久久久久久久一区二区| 亚洲一卡二卡三卡四卡| 亚洲一级二级片| 91婷婷韩国欧美一区二区| 欧洲成人午夜精品无码区久久| 裸体素人女欧美日韩| 日韩一级片一区二区| 中文字幕亚洲影视| 久久99精品久久久久久水蜜桃 | 一级片视频在线观看| 亚洲日本欧美天堂| 99热99这里只有精品| 972aa.com艺术欧美| 2018国产精品| 麻豆国产91在线播放| 国产又猛又黄的视频| 99精品视频免费| 国产精品无码人妻一区二区在线| 欧美大片aaaa| 国产系列第一页| 欧美日韩黑人| 亚洲成人a**址| 欧美猛男男男激情videos| 蜜桃久久精品乱码一区二区| 伊人久久噜噜噜躁狠狠躁| 999久久久| 国产精品亚洲综合在线观看| 91青草视频久久| 日韩电影精品| 91视频国产一区| 99久热在线精品视频观看| 国产一区二区色| 电影亚洲一区| 成人av在线亚洲| 国产一区精品福利| 91在线网站视频| av日韩久久| 波多野结衣久草一区| 国产精品一区二区三区四区在线观看| 亚洲www视频| 国产精品视频一区二区三区| 国产精品美女xx| 国内精品免费| 日韩亚洲不卡在线| 欧洲杯足球赛直播| 男女激烈动态图| 黄色精品免费| 日韩黄色片视频| 久久综合图片| 6080国产精品| 福利一区二区在线观看| 人妻无码一区二区三区| 久久久蜜桃精品| 永久免费看mv网站入口| 亚洲人吸女人奶水| 特一级黄色大片| 91久久久免费一区二区| 一区二区国产欧美| 91精品国产aⅴ一区二区| 日本高清视频在线| 精品亚洲精品福利线在观看| 国产日本在线观看| 欧美人与性动交a欧美精品| 俺来俺也去www色在线观看| 青草热久免费精品视频| jizzyou欧美16| 丁香五月网久久综合| 麻豆国产欧美一区二区三区r| 日韩在线电影一区| 综合国产在线| 亚洲色图 在线视频| 激情久久五月天| 一区二区精品免费| 亚洲丝袜制服诱惑| 婷婷激情五月网| 欧美日本韩国一区| 色网在线视频| 伦伦影院午夜日韩欧美限制| 国产资源在线观看入口av| 91欧美日韩一区| 天海翼亚洲一区二区三区| 97超碰人人爱| 另类av一区二区| 中文成人无字幕乱码精品区| 欧美激情一区二区在线| 国产www在线| 欧美一级日韩一级| 欧美视频综合| 久久人人97超碰精品888| 亚州一区二区三区| 蜜桃av噜噜一区二区三区| 永久亚洲成a人片777777| 亚洲第一狼人区| av在线不卡电影| 久久久久人妻一区精品色欧美| 在线中文字幕不卡| 午夜视频福利在线观看| 久久不射热爱视频精品| 欧美一级大黄| 免费国产一区| 国内精品久久久久久久97牛牛 | 免费视频一区二区| 一色道久久88加勒比一| 亚洲成人免费在线| 韩国av在线免费观看| 中文字幕一区二区三区电影| 深夜福利视频一区二区| 鲁鲁狠狠狠7777一区二区| 国内自拍视频一区二区三区| 中文字幕一区二区三区人妻在线视频| 欧美极品aⅴ影院| 中文字幕一区二区在线视频| 亚洲免费精彩视频| 国产高清自产拍av在线| 极品校花啪啪激情久久| 欧美三区视频| 国产亚洲色婷婷久久99精品91|