精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue.js設(shè)計與實現(xiàn)之六-computed計算屬性的實現(xiàn)

開發(fā) 前端
計算屬性computed其實是一個懶執(zhí)行的副作用函數(shù),可以通過lazy選項使得副作用函數(shù)可以懶執(zhí)行,被標(biāo)記為懶執(zhí)行的副作用函數(shù)可以通過手動執(zhí)行。

1、寫在前面

在前面文章介紹了effect的實現(xiàn),可以用于注冊副作用函數(shù),同時允許一些選項參數(shù)options,可以指定調(diào)度器去控制副作用函數(shù)的執(zhí)行時機(jī)和次數(shù)等。還有用于追蹤和收集依賴的track函數(shù),以及用于觸發(fā)副作用函數(shù)重新執(zhí)行的trigger函數(shù),結(jié)合這些我們可以實現(xiàn)一個計算屬性--computed。

2、懶執(zhí)行的effect

在研究計算屬性的實現(xiàn)之前,需要先去了解下懶執(zhí)行的effect(lazy的effect)。在當(dāng)前設(shè)計的effect函數(shù)中,它會在調(diào)用時立即執(zhí)行傳遞過來的副作用函數(shù)。但是事實上,希望在某些場景并不希望它立即執(zhí)行,而是在需要的時候才執(zhí)行,前面了解到想要改變effect的執(zhí)行可以在options參數(shù)中設(shè)置。

const data = {
name:"pingping",
age:18,
flag:true
}
const state = new Proxy(data,{
/*...*/
})
effect(()=>{
console.log(state.name);
},{
//指定lazy選項,這樣函數(shù)不會立即執(zhí)行
lazy: true
})

就這樣,通過設(shè)置options選項,去修改effect函數(shù)的實現(xiàn)邏輯,當(dāng)options.lazy為true時不會立即執(zhí)行副作用函數(shù):

// effect用于注冊副作用函數(shù)
function effect(fn,options={}){
const effectFn = ()=>{
// 調(diào)用函數(shù)完成清理遺留副作用函數(shù)
cleanupEffect(effectFn)
// 當(dāng)調(diào)用effect注冊副作用函數(shù)時,將副作用函數(shù)fn賦值給activeEffect
activeEffect = effectFn;
// 在副作用函數(shù)執(zhí)行前壓棧
effectStack.push(effectFn)
// 執(zhí)行副作用函數(shù)
fn();
// 執(zhí)行完畢后出棧
effectStack.pop()
activeEffect = effectStack[effectStack.length - 1]
}
// 將options掛載到effectFn函數(shù)上
effectFn.options = options
//deps是用于存儲所有與該副作用函數(shù)相關(guān)聯(lián)的依賴集合
effectFn.deps = [];
// 只有非lazy的時候才執(zhí)行
if(!options.lazy){
// 執(zhí)行副作用函數(shù)effectFn
effectFn()
}
//否則返回副作用函數(shù)
return effectFn
}

在上面代碼片段中,在effect函數(shù)中先判斷了是否需要懶執(zhí)行,對此會判斷options.lazy的值為true時,則將effectFn副作用函數(shù)作為參數(shù)返回到effect。這樣,用戶在調(diào)用執(zhí)行effect函數(shù)時,可以通過返回值去拿到對應(yīng)的effectFn函數(shù),這樣可以手動執(zhí)行該函數(shù)。

const effectFn = effect(()=>{
console.log(state.name);
},{
//指定lazy選項,這樣函數(shù)不會立即執(zhí)行
lazy: true
});
//手動執(zhí)行副作用函數(shù)
effectFn();

但是僅僅實現(xiàn)手動執(zhí)行副作用函數(shù),對于我們的使用意義并不大,如果將返回到effect的副作用函數(shù)作為getter,那么通過這個取值函數(shù)就能獲取返回任何值。

const effectFn = effect(
()=>state.name + state.age,
{
//指定lazy選項,這樣函數(shù)不會立即執(zhí)行
lazy: true
});

//手動執(zhí)行副作用函數(shù),可以獲取到返回的值
const value = effectFn();

這樣就可以實現(xiàn)在調(diào)用的時候,手動執(zhí)行獲取到各種想要得到的值。在effect函數(shù)內(nèi)部只需要做出些改變,只需要在執(zhí)行副作用函數(shù)時將副作用的值返回即可:

// effect用于注冊副作用函數(shù)
function effect(fn,options={}){
const effectFn = ()=>{
// 調(diào)用函數(shù)完成清理遺留副作用函數(shù)
cleanupEffect(effectFn)
// 當(dāng)調(diào)用effect注冊副作用函數(shù)時,將副作用函數(shù)fn賦值給activeEffect
activeEffect = effectFn;
// 在副作用函數(shù)執(zhí)行前壓棧
effectStack.push(effectFn)
// 執(zhí)行副作用函數(shù),將執(zhí)行結(jié)果存儲到res
const res = fn();
// 執(zhí)行完畢后出棧
effectStack.pop()
activeEffect = effectStack[effectStack.length - 1]
// 將res作為effectFn的返回值
return res
}
// 將options掛載到effectFn函數(shù)上
effectFn.options = options
//deps是用于存儲所有與該副作用函數(shù)相關(guān)聯(lián)的依賴集合
effectFn.deps = [];
// 只有非lazy的時候才執(zhí)行
if(!options.lazy){
// 執(zhí)行副作用函數(shù)effectFn
effectFn()
}
//否則返回副作用函數(shù)
return effectFn

}

現(xiàn)在,我們已經(jīng)實現(xiàn)了能夠進(jìn)行懶執(zhí)行的副作用函數(shù),能夠拿到執(zhí)行返回的結(jié)果,做后續(xù)的處理。

3、computed屬性

懶計算的computed屬性

其實,基于前面的設(shè)計和代碼實現(xiàn),大概有了computed屬性函數(shù)的實現(xiàn)雛形,就是接收一個getter函數(shù)作為副作用函數(shù),用于創(chuàng)建一個懶執(zhí)行的effect。computed函數(shù)的執(zhí)行會返回包含一個訪問器屬性的對象,只有在讀取value值的時候才會去執(zhí)行effectFn并返回結(jié)果。

function computed(getter){
const effectFn = effect(
getter,
{
//指定lazy選項,這樣函數(shù)不會立即執(zhí)行
lazy: true
});
const state = {
//當(dāng)對value進(jìn)行讀取操作時,執(zhí)行effectFn并將結(jié)果進(jìn)行返回
get value(){
return effectFn();
}
}
return state;
}

在上面代碼中,只是粗略做了懶計算處理,只有在真正對sumRes.value的值進(jìn)行讀取操作時,才會去進(jìn)行計算并得到值。但是在進(jìn)行多次讀取sumRes.value的值,每次訪問計算得到的值都是相同的,并不符合我們需要使用上次計算值的要求。『計算屬性需要有緩存機(jī)制,這樣就可以使用到上次計算的結(jié)果。』

const sumRes = computed(()=>state.name + state.age);
console.log("hello", sumRes.value);
console.log("hello", sumRes.value);
console.log("hello", sumRes.value);

運行結(jié)果:

之所以發(fā)生這種情況,多次讀取sumRes.value的值時,每次訪問都會重新調(diào)用effectFn重新計算。

帶有緩存的computed

為了解決前面獲取不到上次計算值的問題,需要在實現(xiàn)computed函數(shù)時,添加對計算值的緩存操作。其實實現(xiàn)很簡單,就是添加兩個變量value和dirty,value用于緩存上次計算的值,dirty則標(biāo)識是否需要重新計算。

function computed(getter){
let value;
let dirty = true;
const effectFn = effect(
getter,
{
//指定lazy選項,這樣函數(shù)不會立即執(zhí)行
lazy: true
//在調(diào)度器重置dirtytrue
scheduler(){
dirty = true
}
});
const state = {
//當(dāng)對value進(jìn)行讀取操作時,執(zhí)行effectFn并將結(jié)果進(jìn)行返回
get value(){
//只有當(dāng)dirty標(biāo)識為true值時,才會將計算值進(jìn)行緩存,下一次訪問直接使用緩存的值
if(dirty){
value = effectFn();
dirty = false
}
return value
}
}
return state;
}

在上面代碼中,初始化設(shè)置dirty為true,這樣就會把計算值進(jìn)行緩存,下次進(jìn)行同樣computed計算操作時,就會直接使用緩存的值,而非每次重新計算。同時,在computed函數(shù)的effect中添加scheduler屬性,在函數(shù)內(nèi)部將dirty的值重置為true,在下次訪問sumRes.value時重新調(diào)用effectFn的計算值。

const sumRes = computed(()=>state.name + state.age);
console.log("hello", sumRes.value);
console.log("hello", sumRes.value);
console.log("hello", sumRes.value);
state.age++;
console.log("hello", sumRes.value);

執(zhí)行結(jié)果為:

但是,在當(dāng)前設(shè)計的計算屬性在另一個effect函數(shù)中讀取時,修改響應(yīng)數(shù)據(jù)state上的屬性值并不會觸發(fā)副作用函數(shù)的重新渲染。其實根本原因就是這里存在一個effect嵌套問題,computed內(nèi)部是effect函數(shù)實現(xiàn)的,而在effect中讀取computed的值相當(dāng)于對effect進(jìn)行了嵌套,外層的effect不會被內(nèi)層effect的響應(yīng)式數(shù)據(jù)收集。

當(dāng)然,問題很簡單,解決方法同樣很簡單。只需要在讀取計算屬性值的時候,手動調(diào)用track函數(shù)進(jìn)行追蹤,當(dāng)計算屬性依賴的響應(yīng)式數(shù)據(jù)發(fā)生變化時,手動調(diào)用trigger函數(shù)觸發(fā)響應(yīng):

function computed(getter){
let value;
let dirty = true;

const effectFn = effect(
getter,
{
//指定lazy選項,這樣函數(shù)不會立即執(zhí)行
lazy: true,
//在調(diào)度器重置dirtytrue
scheduler(){
dirty = true
trigger(state, "value")
}
}
);
const state = {
//當(dāng)對value進(jìn)行讀取操作時,執(zhí)行effectFn并將結(jié)果進(jìn)行返回
get value(){
//只有當(dāng)dirty標(biāo)識為true值時,才會將計算值進(jìn)行緩存,下一次訪問直接使用緩存的值
if(dirty){
value = effectFn();
dirty = false
}
// 對value進(jìn)行取值操作時,手動調(diào)用track函數(shù)進(jìn)行追蹤
track(state, "value")
return value
}
}
return state;
}

寫一段簡單的demo進(jìn)行實驗:

const sumRes = computed(()=>state.name + state.age);
console.log("hello", sumRes.value);
console.log("hello", sumRes.value);
console.log("hello", sumRes.value);
effect(()=>{
console.log(sumRes.value);
})
state.age++

console.log("hello", sumRes.value);

執(zhí)行結(jié)果:

根據(jù)上面的實現(xiàn)demo可以分析出對應(yīng)的計算屬性的響應(yīng)聯(lián)系圖:

計算屬性的響應(yīng)聯(lián)系

4、寫在最后

計算屬性computed其實是一個懶執(zhí)行的副作用函數(shù),可以通過lazy選項使得副作用函數(shù)可以懶執(zhí)行,被標(biāo)記為懶執(zhí)行的副作用函數(shù)可以通過手動執(zhí)行。在讀取計算屬性的值時,可以手動執(zhí)行副作用函數(shù),在依賴的響應(yīng)式數(shù)據(jù)發(fā)生變化時,通過scheduler將dirty標(biāo)記設(shè)置為true,即為臟數(shù)據(jù),在下次讀取計算屬性的值,就會重新計算得到真正的值。

責(zé)任編輯:姜華 來源: 前端一碼平川
相關(guān)推薦

2022-04-12 08:08:57

watch函數(shù)options封裝

2022-04-25 07:36:21

組件數(shù)據(jù)函數(shù)

2022-04-01 08:08:27

Vue.js框架命令式

2022-04-04 16:53:56

Vue.js設(shè)計框架

2022-04-18 08:09:44

渲染器DOM掛載Vue.js

2022-05-03 21:18:38

Vue.js組件KeepAlive

2022-04-14 09:35:03

Vue.js設(shè)計Reflect

2022-04-05 16:44:59

系統(tǒng)Vue.js響應(yīng)式

2022-04-17 09:18:11

響應(yīng)式數(shù)據(jù)Vue.js

2022-04-09 17:53:56

Vue.js分支切換嵌套的effect

2022-04-03 15:44:55

Vue.js框架設(shè)計設(shè)計與實現(xiàn)

2022-04-16 13:59:34

Vue.jsJavascript

2022-04-26 05:55:06

Vue.js異步組件

2022-04-19 23:01:54

Vue.jsDOM節(jié)點DOM樹

2022-04-20 09:07:04

Vue.js的事件處理

2016-11-01 19:10:33

vue.js前端前端框架

2023-12-11 07:34:37

Computed計算屬性Vue3

2024-05-17 09:51:11

2019-04-01 19:38:28

Vue.jsJavascript前端

2021-09-18 10:07:23

開發(fā)技能代碼
點贊
收藏

51CTO技術(shù)棧公眾號

www欧美在线| xxxx国产视频| 97在线观看免费观看高清 | 久久亚洲电影天堂| 亚洲欧美日韩国产手机在线 | 五月香视频在线观看| 国产一区二区三区在线观看精品 | 爱情电影网av一区二区| 亚洲黄色性网站| 欧美精品久久| 国产乱码一区二区| 亚洲永久免费| 久久伊人精品视频| 不卡一区二区在线观看| 成人激情久久| 欧美亚洲一区三区| 免费看黄在线看| 免费网站成人| 国产ts人妖一区二区| 国产精品海角社区在线观看| 免费一级片视频| 99久久婷婷这里只有精品| 亚洲第一区中文99精品| 福利片一区二区三区| 咪咪网在线视频| 亚洲三级免费观看| 日韩免费一区二区三区| 视频二区在线观看| 国产精品一级黄| 国产极品jizzhd欧美| 成年人免费看毛片| 好看的亚洲午夜视频在线| 一本色道久久88综合亚洲精品ⅰ | 草草视频在线一区二区| 欧美日本免费一区二区三区| 美女福利视频在线| 17videosex性欧美| 一区二区三区国产精品| 自拍偷拍视频在线| sese一区| 欧美国产一区在线| 欧美大陆一区二区| 天堂v在线观看| 成人sese在线| 国产精品国产精品国产专区蜜臀ah | 亚洲在线播放| 69久久夜色精品国产7777| 精品爆乳一区二区三区无码av| 91综合久久一区二区| 在线看日韩欧美| 少妇精品无码一区二区免费视频| 久久爱www成人| 亚洲人成在线免费观看| 久久久久久亚洲中文字幕无码| 欧洲亚洲成人| 亚洲免费电影在线观看| 青青草福利视频| 激情综合网站| 中文字幕欧美日韩精品| 亚洲aaa视频| 91精品久久久久久久久久不卡| www.日本久久久久com.| 情侣偷拍对白清晰饥渴难耐| 亚洲天堂免费| 欧美激情在线观看视频| 日韩精品一区二区不卡| 午夜在线精品| 国产精品久久视频| 一二三四区在线| 国产一区二区三区av电影| 99久久精品免费看国产一区二区三区| 午夜老司机福利| 不卡视频一二三| 欧美精品一区二区视频| aaa在线观看| 亚洲欧美日韩国产中文在线| 国产精品成人久久电影| 性爽视频在线| 欧美撒尿777hd撒尿| 欧美视频亚洲图片| 牛牛影视久久网| 伊人伊人伊人久久| 精品自拍偷拍视频| 99热这里只有精品8| 国产精品久久久久久久久久久久 | av成人亚洲| 欧美一区二区黄| 7788色淫网站小说| 日韩国产一区二区三区| 欧美成年人在线观看| 99精品视频99| 麻豆精品一二三| 国产精品美女诱惑| 91在线品视觉盛宴免费| 亚洲一级二级在线| 亚洲老女人av| 高清精品视频| 日韩在线观看精品| 日韩欧美亚洲视频| 精品在线观看免费| 久久亚洲高清| 在线免费观看污| 日本电影亚洲天堂一区| 宇都宫紫苑在线播放| 欧美激情在线精品一区二区三区| 久久精品国产一区二区三区| 日韩成人一区二区三区| 久久99精品国产麻豆婷婷| 国模精品一区二区三区| 麻豆av在线免费看| 91福利资源站| 日韩综合第一页| 亚洲国产日韩欧美在线| 日本人成精品视频在线| 亚洲第一视频在线| 国产精品每日更新在线播放网址 | 日韩国产精品91| 超碰97人人人人人蜜桃| 婷婷五月在线视频| 日韩欧美主播在线| 人妻体内射精一区二区三区| 亚洲国产精品久久久天堂| 国产成人jvid在线播放| 人妻精品一区二区三区| 亚洲精选一二三| 天天视频天天爽| 少妇精品久久久| 97精品视频在线观看| 国产农村老头老太视频| 国产精品嫩草影院av蜜臀| 日韩av一二三四区| 国产精品极品在线观看| 欧美成人性生活| 一区二区三区亚洲视频| 国产人成亚洲第一网站在线播放| 国产精品沙发午睡系列| 91精品国产自产在线丝袜啪| 久久躁日日躁aaaaxxxx| 一级黄在线观看| 国产精品乱码人人做人人爱| 国产精品乱码久久久久| 久草成人在线| 国产成人亚洲综合91精品| 日韩大片b站免费观看直播| 午夜精品视频一区| 日韩精品一区二区三区高清免费| 黄色日韩在线| 国产在线欧美日韩| 日本在线高清| 亚洲美女在线视频| 亚洲不卡在线视频| 久久久久99精品一区| 男人透女人免费视频| 久久99青青| 国产精品日韩欧美| 在线免费av电影| 欧美日韩在线三级| 色哟哟一一国产精品| 国产揄拍国内精品对白| 99热都是精品| 亚洲高清在线一区| 韩日精品中文字幕| 欧美婷婷久久五月精品三区| 色婷婷av久久久久久久| 精品人体无码一区二区三区| 激情小说亚洲一区| 日韩精品免费一区| 久久影视三级福利片| 欧美中文字幕第一页| 国产小视频福利在线| 欧美人伦禁忌dvd放荡欲情| 国产精品 欧美激情| 国产91精品露脸国语对白| 日本a在线免费观看| 国产毛片一区二区三区| 91精品久久久久久久久久另类| 国产1区在线| 欧美精品一区二区三区蜜桃| 无码人妻av免费一区二区三区| 国产精品私人自拍| 国产女主播在线播放| 久久一综合视频| 国产四区在线观看| 牛牛影视一区二区三区免费看| 国产精品精品久久久| 26uuu亚洲电影在线观看| 亚洲精品久久久久久久久| 成人免费一级片| 亚洲精品免费看| 91精品人妻一区二区| 精品中文av资源站在线观看| 日韩极品视频在线观看| 精品久久久久久久久久久下田 | 国产视频一区二区视频| 91精品高清| 青青草成人网| 999久久久精品一区二区| 国产成+人+综合+亚洲欧美丁香花| 老司机福利在线视频| 亚洲精品国产成人| 91久久偷偷做嫩草影院| 国产精品7777| 国产精品久久久久久久浪潮网站| 亚洲最大视频网| 免费av网站大全久久| 日韩精品视频在线观看视频| 日韩免费视频| 久久精品国产美女| 国产免费av国片精品草莓男男| 51视频国产精品一区二区| 岛国成人毛片| 国产一区二区黑人欧美xxxx| 乱精品一区字幕二区| 欧美日韩精品系列| 亚洲免费黄色网址| 一区二区三区美女视频| youjizz亚洲女人| 91久色porny| 波多野结衣办公室双飞| 九色综合狠狠综合久久| 色一情一乱一伦一区二区三区日本| 欧美午夜a级限制福利片| 亚洲精品中文字幕在线| 日韩系列在线| 国产精品成人一区二区三区| 福利一区在线| 国产成人激情小视频| 免费h在线看| 国内精品400部情侣激情| 成人影院在线看| 深夜福利一区二区| 国产精品久久一区二区三区不卡| 日韩激情av在线播放| 亚洲免费黄色片| 91精品国产麻豆| 一区二区国产欧美| 欧美色精品天天在线观看视频| 国语对白永久免费| 福利二区91精品bt7086| 五月婷婷激情网| 香港成人在线视频| 国产网址在线观看| 亚洲国产综合色| 亚洲精品在线观看av| 一区二区三区在线免费| 亚洲综合网在线| 免费a级毛片在线观看| 欧美精品在线一区二区三区| 亚洲怡红院av| 欧美精品一二三四| 精品久久久中文字幕人妻| 91.成人天堂一区| 99在线精品视频免费观看20| 欧美性xxxx极品hd满灌| 国产高清中文字幕| 亚洲国产乱码最新视频| 日韩精品一卡二卡| 色综合网色综合| 中文字幕人妻一区二区三区视频| 欧美亚洲一区二区在线观看| 一级黄色小视频| 欧美一卡2卡三卡4卡5免费| 草逼视频免费看| 亚洲国产成人久久综合| 精品二区在线观看| 亚洲第一黄色网| 五月婷婷六月色| 一级做a爰片久久毛片美女图片| av成人手机在线| 欧美寡妇偷汉性猛交| aa视频在线观看| 国产成人自拍视频在线观看| 成人在线中文| 国产精品日韩专区| 日本高清久久| 99久久久久国产精品免费| 九九九九九九精品任你躁| 成人免费在线看片| 最新国产精品视频| 亚洲欧美国产一区二区| 国产精品激情电影| 免费黄色福利视频| 黑人精品欧美一区二区蜜桃| 久久久久无码国产精品一区李宗瑞 | 黄色小视频免费网站| 国产精品亚洲午夜一区二区三区| 无码成人精品区在线观看| 国产亚洲欧美日韩在线一区| √天堂中文官网8在线| 午夜精品视频在线观看| 中文在线最新版天堂| 欧美草草影院在线视频| 蜜芽tv福利在线视频| 久久久国产精品亚洲一区| 毛片在线网站| 91久久久久久久久久| 日韩最新在线| 四虎精品欧美一区二区免费| 久久久www| 日韩av成人网| 中文字幕精品在线不卡| 国产午夜视频在线播放| 欧美日韩国产小视频在线观看| 亚洲奶汁xxxx哺乳期| 丝袜美腿亚洲一区二区| 91在线三级| 91网站免费观看| 精品理论电影| 五十路熟女丰满大屁股| 激情综合色综合久久| 极品人妻videosss人妻| 午夜婷婷国产麻豆精品| 99国产精品99| 中文字幕在线看视频国产欧美在线看完整| a'aaa级片在线观看| 成人在线小视频| 日本女优一区| 国产主播在线看| 不卡的看片网站| 青青草手机视频在线观看| 欧美日韩一区二区三区在线| 日韩一二三四| 97久久精品视频| 超碰一区二区三区| 2021狠狠干| 久久99久久99小草精品免视看| 国产ts在线播放| 欧美日韩视频免费播放| 亚洲精品成av人片天堂无码 | 国产原创一区二区三区| 最新中文字幕av| 中文久久电影小说| 成人伊人精品色xxxx视频| 精品国产乱码久久久| 久久美女福利视频| 2欧美一区二区三区在线观看视频| 精品少妇久久久久久888优播| 91精品中文字幕一区二区三区| 中文字幕在线视频区| 国产精品色婷婷视频| 成人激情免费视频| 成人性生生活性生交12| 国产免费观看久久| 亚洲中文无码av在线| 亚洲欧洲在线播放| 春暖花开亚洲一区二区三区| 久久99精品久久久水蜜桃| 在线亚洲成人| 欧美丰满少妇人妻精品| 日韩欧美在线视频日韩欧美在线视频| 日韩三级电影网| 国产成人精品免高潮在线观看| 久久av免费看| 亚洲最大成人在线观看| 国产精品大尺度| 99久久精品无免国产免费| 欧美美最猛性xxxxxx| 亚洲日本va中文字幕| av日韩一区二区三区| 91麻豆国产在线观看| 秋霞av一区二区三区| 在线精品播放av| 精品国产欧美| 97干在线视频| 久久日韩精品一区二区五区| 波多野结衣一区二区三区在线| 在线观看久久av| 久久精品免视看国产成人| 日本五级黄色片| 26uuu亚洲| 日韩欧美国产另类| www.午夜精品| 国产欧美自拍一区| 日本成年人网址| 国产精品国产三级国产aⅴ中文| 国产精品视频无码| 97视频在线观看成人| 欧美日韩国产高清电影| 青青草久久伊人| 午夜精品久久久久久久久久 | 国产精品欧美激情在线观看| 国产亚洲成aⅴ人片在线观看 | 亚洲午夜精品一区二区三区| 国产一区二区免费看| 九九热国产视频| 少妇av一区二区三区| 久9re热视频这里只有精品| 少妇一级淫免费放| 亚洲香肠在线观看| 国产系列电影在线播放网址| 91久久久久久久久久久| 一本色道久久综合| 午夜激情视频在线播放| 亚洲国产精品va在线看黑人| 成人黄色毛片| 精品无码一区二区三区在线| 国产精品三级av在线播放| 人妻无码中文字幕| 国产主播在线一区| 国产精品毛片|