日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vuex源码解析

發布時間:2024/9/21 vue 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vuex源码解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

寫在前面

因為對Vue.js很感興趣,而且平時工作的技術棧也是Vue.js,這幾個月花了些時間研究學習了一下Vue.js源碼,并做了總結與輸出。

文章的原地址:https://github.com/answershuto/learnVue。

在學習過程中,為Vue加上了中文的注釋https://github.com/answershuto/learnVue/tree/master/vue-src以及Vuex的注釋https://github.com/answershuto/learnVue/tree/master/vuex-src,希望可以對其他想學習源碼的小伙伴有所幫助。

可能會有理解存在偏差的地方,歡迎提issue指出,共同學習,共同進步。

Vuex

我們在使用Vue.js開發復雜的應用時,經常會遇到多個組件共享同一個狀態,亦或是多個組件會去更新同一個狀態,在應用代碼量較少的時候,我們可以組件間通信去維護修改數據,或者是通過事件總線來進行數據的傳遞以及修改。但是當應用逐漸龐大以后,代碼就會變得難以維護,從父組件開始通過prop傳遞多層嵌套的數據由于層級過深而顯得異常脆弱,而事件總線也會因為組件的增多、代碼量的增大而顯得交互錯綜復雜,難以捋清其中的傳遞關系。

那么為什么我們不能將數據層與組件層抽離開來呢?把數據層放到全局形成一個單一的Store,組件層變得更薄,專門用來進行數據的展示及操作。所有數據的變更都需要經過全局的Store來進行,形成一個單向數據流,使數據變化變得“可預測”。

Vuex是一個專門為Vue.js框架設計的、用于對Vue.js應用程序進行狀態管理的庫,它借鑒了Flux、redux的基本思想,將共享的數據抽離到全局,以一個單例存放,同時利用Vue.js的響應式機制來進行高效的狀態管理與更新。正是因為Vuex使用了Vue.js內部的“響應式機制”,所以Vuex是一個專門為Vue.js設計并與之高度契合的框架(優點是更加簡潔高效,缺點是只能跟Vue.js搭配使用)。具體使用方法及API可以參考Vuex的官網。

先來看一下這張Vuex的數據流程圖,熟悉Vuex使用的同學應該已經有所了解。

Vuex實現了一個單向數據流,在全局擁有一個State存放數據,所有修改State的操作必須通過Mutation進行,Mutation的同時提供了訂閱者模式供外部插件調用獲取State數據的更新。所有異步接口需要走Action,常見于調用后端接口異步獲取更新數據,而Action也是無法直接修改State的,還是需要通過Mutation來修改State的數據。最后,根據State的變化,渲染到視圖上。Vuex運行依賴Vue內部數據雙向綁定機制,需要new一個Vue對象來實現“響應式化”,所以Vuex是一個專門為Vue.js設計的狀態管理庫。

安裝

使用過Vuex的朋友一定知道,Vuex的安裝十分簡單,只需要提供一個store,然后執行下面兩句代碼即完成的Vuex的引入。

Vue.use(Vuex);/*將store放入Vue創建時的option中*/ new Vue({el: '#app',store });

那么問題來了,Vuex是怎樣把store注入到Vue實例中去的呢?

Vue.js提供了Vue.use方法用來給Vue.js安裝插件,內部通過調用插件的install方法(當插件是一個對象的時候)來進行插件的安裝。

我們來看一下Vuex的install實現。

/*暴露給外部的插件install方法,供Vue.use調用安裝插件*/ export function install (_Vue) {if (Vue) {/*避免重復安裝(Vue.use內部也會檢測一次是否重復安裝同一個插件)*/if (process.env.NODE_ENV !== 'production') {console.error('[vuex] already installed. Vue.use(Vuex) should be called only once.')}return}/*保存Vue,同時用于檢測是否重復安裝*/Vue = _Vue/*將vuexInit混淆進Vue的beforeCreate(Vue2.0)或_init方法(Vue1.0)*/applyMixin(Vue) }

這段install代碼做了兩件事情,一件是防止Vuex被重復安裝,另一件是執行applyMixin,目的是執行vuexInit方法初始化Vuex。Vuex針對Vue1.0與2.0分別進行了不同的處理,如果是Vue1.0,Vuex會將vuexInit方法放入Vue的_init方法中,而對于Vue2.0,則會將vuexinit混淆進Vue的beforeCreacte鉤子中。來看一下vuexInit的代碼。

/*Vuex的init鉤子,會存入每一個Vue實例等鉤子列表*/function vuexInit () {const options = this.$options// store injectionif (options.store) {/*存在store其實代表的就是Root節點,直接執行store(function時)或者使用store(非function)*/this.$store = typeof options.store === 'function'? options.store(): options.store} else if (options.parent && options.parent.$store) {/*子組件直接從父組件中獲取$store,這樣就保證了所有組件都公用了全局的同一份store*/this.$store = options.parent.$store}}

vuexInit會嘗試從options中獲取store,如果當前組件是根組件(Root節點),則options中會存在store,直接獲取賦值給$store即可。如果當前組件非根組件,則通過options中的parent獲取父組件的$store引用。這樣一來,所有的組件都獲取到了同一份內存地址的Store實例,于是我們可以在每一個組件中通過this.$store愉快地訪問全局的Store實例了。

那么,什么是Store實例?

Store

我們傳入到根組件到store,就是Store實例,用Vuex提供到Store方法構造。

export default new Vuex.Store({strict: true,modules: {moduleA,moduleB} });

我們來看一下Store的實現。首先是構造函數。

constructor (options = {}) {// Auto install if it is not done yet and `window` has `Vue`.// To allow users to avoid auto-installation in some cases,// this code should be placed here. See #731/*在瀏覽器環境下,如果插件還未安裝(!Vue即判斷是否未安裝),則它會自動安裝。它允許用戶在某些情況下避免自動安裝。*/if (!Vue && typeof window !== 'undefined' && window.Vue) {install(window.Vue)}if (process.env.NODE_ENV !== 'production') {assert(Vue, `must call Vue.use(Vuex) before creating a store instance.`)assert(typeof Promise !== 'undefined', `vuex requires a Promise polyfill in this browser.`)assert(this instanceof Store, `Store must be called with the new operator.`)}const {/*一個數組,包含應用在 store 上的插件方法。這些插件直接接收 store 作為唯一參數,可以監聽 mutation(用于外部地數據持久化、記錄或調試)或者提交 mutation (用于內部數據,例如 websocket 或 某些觀察者)*/plugins = [],/*使 Vuex store 進入嚴格模式,在嚴格模式下,任何 mutation 處理函數以外修改 Vuex state 都會拋出錯誤。*/strict = false} = options/*從option中取出state,如果state是function則執行,最終得到一個對象*/let {state = {}} = optionsif (typeof state === 'function') {state = state()}// store internal state/* 用來判斷嚴格模式下是否是用mutation修改state的 */this._committing = false/* 存放action */this._actions = Object.create(null)/* 存放mutation */this._mutations = Object.create(null)/* 存放getter */this._wrappedGetters = Object.create(null)/* module收集器 */this._modules = new ModuleCollection(options)/* 根據namespace存放module */this._modulesNamespaceMap = Object.create(null)/* 存放訂閱者 */this._subscribers = []/* 用以實現Watch的Vue實例 */this._watcherVM = new Vue()// bind commit and dispatch to self/*將dispatch與commit調用的this綁定為store對象本身,否則在組件內部this.dispatch時的this會指向組件的vm*/const store = thisconst { dispatch, commit } = this/* 為dispatch與commit綁定this(Store實例本身) */this.dispatch = function boundDispatch (type, payload) {return dispatch.call(store, type, payload)}this.commit = function boundCommit (type, payload, options) {return commit.call(store, type, payload, options)}// strict mode/*嚴格模式(使 Vuex store 進入嚴格模式,在嚴格模式下,任何 mutation 處理函數以外修改 Vuex state 都會拋出錯誤)*/this.strict = strict// init root module.// this also recursively registers all sub-modules// and collects all module getters inside this._wrappedGetters/*初始化根module,這也同時遞歸注冊了所有子modle,收集所有module的getter到_wrappedGetters中去,this._modules.root代表根module才獨有保存的Module對象*/installModule(this, state, [], this._modules.root)// initialize the store vm, which is responsible for the reactivity// (also registers _wrappedGetters as computed properties)/* 通過vm重設store,新建Vue對象使用Vue內部的響應式實現注冊state以及computed */resetStoreVM(this, state)// apply plugins/* 調用插件 */plugins.forEach(plugin => plugin(this))/* devtool插件 */if (Vue.config.devtools) {devtoolPlugin(this)}}

Store的構造類除了初始化一些內部變量以外,主要執行了installModule(初始化module)以及resetStoreVM(通過VM使store“響應式”)。

installModule

installModule的作用主要是用為module加上namespace名字空間(如果有)后,注冊mutation、action以及getter,同時遞歸安裝所有子module。

/*初始化module*/ function installModule (store, rootState, path, module, hot) {/* 是否是根module */const isRoot = !path.length/* 獲取module的namespace */const namespace = store._modules.getNamespace(path)// register in namespace map/* 如果有namespace則在_modulesNamespaceMap中注冊 */if (module.namespaced) {store._modulesNamespaceMap[namespace] = module}// set stateif (!isRoot && !hot) {/* 獲取父級的state */const parentState = getNestedState(rootState, path.slice(0, -1))/* module的name */const moduleName = path[path.length - 1]store.`_withCommit`(() => {/* 將子module設置稱響應式的 */Vue.set(parentState, moduleName, module.state)})}const local = module.context = makeLocalContext(store, namespace, path)/* 遍歷注冊mutation */module.forEachMutation((mutation, key) => {const namespacedType = namespace + keyregisterMutation(store, namespacedType, mutation, local)})/* 遍歷注冊action */module.forEachAction((action, key) => {const namespacedType = namespace + keyregisterAction(store, namespacedType, action, local)})/* 遍歷注冊getter */module.forEachGetter((getter, key) => {const namespacedType = namespace + keyregisterGetter(store, namespacedType, getter, local)})/* 遞歸安裝mudule */module.forEachChild((child, key) => {installModule(store, rootState, path.concat(key), child, hot)}) }

resetStoreVM

在說resetStoreVM之前,先來看一個小demo。

let globalData = {d: 'hello world' }; new Vue({data () {return {$$state: {globalData}}} });/* modify */ setTimeout(() => {globalData.d = 'hi~'; }, 1000);Vue.prototype.globalData = globalData;/* 任意模板中 */ <div>{{globalData.d}}</div>

上述代碼在全局有一個globalData,它被傳入一個Vue對象的data中,之后在任意Vue模板中對該變量進行展示,因為此時globalData已經在Vue的prototype上了所以直接通過this.prototype訪問,也就是在模板中的{{prototype.d}}。此時,setTimeout在1s之后將globalData.d進行修改,我們發現模板中的globalData.d發生了變化。其實上述部分就是Vuex依賴Vue核心實現數據的“響應式化”。

不熟悉Vue.js響應式原理的同學可以通過筆者另一篇文章響應式原理了解Vue.js是如何進行數據雙向綁定的。

接著來看代碼。

/* 通過vm重設store,新建Vue對象使用Vue內部的響應式實現注冊state以及computed */ function resetStoreVM (store, state, hot) {/* 存放之前的vm對象 */const oldVm = store._vm // bind store public gettersstore.getters = {}const wrappedGetters = store._wrappedGettersconst computed = {}/* 通過Object.defineProperty為每一個getter方法設置get方法,比如獲取this.$store.getters.test的時候獲取的是store._vm.test,也就是Vue對象的computed屬性 */forEachValue(wrappedGetters, (fn, key) => {// use computed to leverage its lazy-caching mechanismcomputed[key] = () => fn(store)Object.defineProperty(store.getters, key, {get: () => store._vm[key],enumerable: true // for local getters})})// use a Vue instance to store the state tree// suppress warnings just in case the user has added// some funky global mixinsconst silent = Vue.config.silent/* Vue.config.silent暫時設置為true的目的是在new一個Vue實例的過程中不會報出一切警告 */Vue.config.silent = true/* 這里new了一個Vue對象,運用Vue內部的響應式實現注冊state以及computed*/store._vm = new Vue({data: {$$state: state},computed})Vue.config.silent = silent// enable strict mode for new vm/* 使能嚴格模式,保證修改store只能通過mutation */if (store.strict) {enableStrictMode(store)}if (oldVm) {/* 解除舊vm的state的引用,以及銷毀舊的Vue對象 */if (hot) {// dispatch changes in all subscribed watchers// to force getter re-evaluation for hot reloading.store._withCommit(() => {oldVm._data.$$state = null})}Vue.nextTick(() => oldVm.$destroy())} }

resetStoreVM首先會遍歷wrappedGetters,使用Object.defineProperty方法為每一個getter綁定上get方法,這樣我們就可以在組件里訪問this.$store.getter.test就等同于訪問store._vm.test。

forEachValue(wrappedGetters, (fn, key) => {// use computed to leverage its lazy-caching mechanismcomputed[key] = () => fn(store)Object.defineProperty(store.getters, key, {get: () => store._vm[key],enumerable: true // for local getters}) })

之后Vuex采用了new一個Vue對象來實現數據的“響應式化”,運用Vue.js內部提供的數據雙向綁定功能來實現store的數據與視圖的同步更新。

store._vm = new Vue({data: {$$state: state},computed })

這時候我們訪問store._vm.test也就訪問了Vue實例中的屬性。

這兩步執行完以后,我們就可以通過this.$store.getter.test訪問vm中的test屬性了。

嚴格模式

Vuex的Store構造類的option有一個strict的參數,可以控制Vuex執行嚴格模式,嚴格模式下,所有修改state的操作必須通過mutation實現,否則會拋出錯誤。

/* 使能嚴格模式 */ function enableStrictMode (store) {store._vm.$watch(function () { return this._data.$$state }, () => {if (process.env.NODE_ENV !== 'production') {/* 檢測store中的_committing的值,如果是true代表不是通過mutation的方法修改的 */assert(store._committing, `Do not mutate vuex store state outside mutation handlers.`)}}, { deep: true, sync: true }) }

首先,在嚴格模式下,Vuex會利用vm的$watch方法來觀察$$state,也就是Store的state,在它被修改的時候進入回調。我們發現,回調中只有一句話,用assert斷言來檢測store._committing,當store._committing為false的時候會觸發斷言,拋出異常。

我們發現,Store的commit方法中,執行mutation的語句是這樣的。

this._withCommit(() => {entry.forEach(function commitIterator (handler) {handler(payload)}) })

再來看看_withCommit的實現。

_withCommit (fn) {/* 調用withCommit修改state的值時會將store的committing值置為true,內部會有斷言檢查該值,在嚴格模式下只允許使用mutation來修改store中的值,而不允許直接修改store的數值 */const committing = this._committingthis._committing = truefn()this._committing = committing }

我們發現,通過commit(mutation)修改state數據的時候,會再調用mutation方法之前將committing置為true,接下來再通過mutation函數修改state中的數據,這時候觸發$watch中的回調斷言committing是不會拋出異常的(此時committing為true)。而當我們直接修改state的數據時,觸發$watch的回調執行斷言,這時committing為false,則會拋出異常。這就是Vuex的嚴格模式的實現。

接下來我們來看看Store提供的一些API。

commit(mutation)

/* 調用mutation的commit方法 */ commit (_type, _payload, _options) {// check object-style commit/* 校驗參數 */const {type,payload,options} = unifyObjectStyle(_type, _payload, _options)const mutation = { type, payload }/* 取出type對應的mutation的方法 */const entry = this._mutations[type]if (!entry) {if (process.env.NODE_ENV !== 'production') {console.error(`[vuex] unknown mutation type: ${type}`)}return}/* 執行mutation中的所有方法 */this._withCommit(() => {entry.forEach(function commitIterator (handler) {handler(payload)})})/* 通知所有訂閱者 */this._subscribers.forEach(sub => sub(mutation, this.state))if (process.env.NODE_ENV !== 'production' &&options && options.silent) {console.warn(`[vuex] mutation type: ${type}. Silent option has been removed. ` +'Use the filter functionality in the vue-devtools')} }

commit方法會根據type找到并調用_mutations中的所有type對應的mutation方法,所以當沒有namespace的時候,commit方法會觸發所有module中的mutation方法。再執行完所有的mutation之后會執行_subscribers中的所有訂閱者。我們來看一下_subscribers是什么。

Store給外部提供了一個subscribe方法,用以注冊一個訂閱函數,會push到Store實例的_subscribers中,同時返回一個從_subscribers中注銷該訂閱者的方法。

/* 注冊一個訂閱函數,返回取消訂閱的函數 */ subscribe (fn) {const subs = this._subscribersif (subs.indexOf(fn) < 0) {subs.push(fn)}return () => {const i = subs.indexOf(fn)if (i > -1) {subs.splice(i, 1)}} }

在commit結束以后則會調用這些_subscribers中的訂閱者,這個訂閱者模式提供給外部一個監視state變化的可能。state通過mutation改變時,可以有效補獲這些變化。

dispatch(action)

來看一下dispatch的實現。

/* 調用action的dispatch方法 */ dispatch (_type, _payload) {// check object-style dispatchconst {type,payload} = unifyObjectStyle(_type, _payload)/* actions中取出type對應的ation */const entry = this._actions[type]if (!entry) {if (process.env.NODE_ENV !== 'production') {console.error(`[vuex] unknown action type: ${type}`)}return}/* 是數組則包裝Promise形成一個新的Promise,只有一個則直接返回第0個 */return entry.length > 1? Promise.all(entry.map(handler => handler(payload))): entry[0](payload) }

以及registerAction時候做的事情。

/* 遍歷注冊action */ function registerAction (store, type, handler, local) {/* 取出type對應的action */const entry = store._actions[type] || (store._actions[type] = [])entry.push(function wrappedActionHandler (payload, cb) {let res = handler.call(store, {dispatch: local.dispatch,commit: local.commit,getters: local.getters,state: local.state,rootGetters: store.getters,rootState: store.state}, payload, cb)/* 判斷是否是Promise */if (!isPromise(res)) {/* 不是Promise對象的時候轉化稱Promise對象 */res = Promise.resolve(res)}if (store._devtoolHook) {/* 存在devtool插件的時候觸發vuex的error給devtool */return res.catch(err => {store._devtoolHook.emit('vuex:error', err)throw err})} else {return res}}) }

因為registerAction的時候將push進_actions的action進行了一層封裝(wrappedActionHandler),所以我們在進行dispatch的第一個參數中獲取state、commit等方法。之后,執行結果res會被進行判斷是否是Promise,不是則會進行一層封裝,將其轉化成Promise對象。dispatch時則從_actions中取出,只有一個的時候直接返回,否則用Promise.all處理再返回。

watch

/* 觀察一個getter方法 */ watch (getter, cb, options) {if (process.env.NODE_ENV !== 'production') {assert(typeof getter === 'function', `store.watch only accepts a function.`)}return this._watcherVM.$watch(() => getter(this.state, this.getters), cb, options) }

熟悉Vue的朋友應該很熟悉watch這個方法。這里采用了比較巧妙的設計,_watcherVM是一個Vue的實例,所以watch就可以直接采用了Vue內部的watch特性提供了一種觀察數據getter變動的方法。

registerModule

/* 注冊一個動態module,當業務進行異步加載的時候,可以通過該接口進行注冊動態module */ registerModule (path, rawModule) {/* 轉化稱Array */if (typeof path === 'string') path = [path]if (process.env.NODE_ENV !== 'production') {assert(Array.isArray(path), `module path must be a string or an Array.`)assert(path.length > 0, 'cannot register the root module by using registerModule.')}/*注冊*/this._modules.register(path, rawModule)/*初始化module*/installModule(this, this.state, path, this._modules.get(path))// reset store to update getters.../* 通過vm重設store,新建Vue對象使用Vue內部的響應式實現注冊state以及computed */resetStoreVM(this, this.state) }

registerModule用以注冊一個動態模塊,也就是在store創建以后再注冊模塊的時候用該接口。內部實現實際上也只有installModule與resetStoreVM兩個步驟,前面已經講過,這里不再累述。

unregisterModule

/* 注銷一個動態module */ unregisterModule (path) {/* 轉化稱Array */if (typeof path === 'string') path = [path]if (process.env.NODE_ENV !== 'production') {assert(Array.isArray(path), `module path must be a string or an Array.`)}/*注銷*/this._modules.unregister(path)this._withCommit(() => {/* 獲取父級的state */const parentState = getNestedState(this.state, path.slice(0, -1))/* 從父級中刪除 */Vue.delete(parentState, path[path.length - 1])})/* 重制store */resetStore(this) }

同樣,與registerModule對應的方法unregisterModule,動態注銷模塊。實現方法是先從state中刪除模塊,然后用resetStore來重制store。

resetStore

/* 重制store */ function resetStore (store, hot) {store._actions = Object.create(null)store._mutations = Object.create(null)store._wrappedGetters = Object.create(null)store._modulesNamespaceMap = Object.create(null)const state = store.state// init all modulesinstallModule(store, state, [], store._modules.root, true)// reset vmresetStoreVM(store, state, hot) }

這里的resetStore其實也就是將store中的_actions等進行初始化以后,重新執行installModule與resetStoreVM來初始化module以及用Vue特性使其“響應式化”,這跟構造函數中的是一致的。

插件

Vue提供了一個非常好用的插件Vue.js devtools

/* 從window對象的__VUE_DEVTOOLS_GLOBAL_HOOK__中獲取devtool插件 */ const devtoolHook =typeof window !== 'undefined' &&window.__VUE_DEVTOOLS_GLOBAL_HOOK__export default function devtoolPlugin (store) {if (!devtoolHook) return/* devtoll插件實例存儲在store的_devtoolHook上 */store._devtoolHook = devtoolHook/* 出發vuex的初始化事件,并將store的引用地址傳給deltool插件,使插件獲取store的實例 */devtoolHook.emit('vuex:init', store)/* 監聽travel-to-state事件 */devtoolHook.on('vuex:travel-to-state', targetState => {/* 重制state */store.replaceState(targetState)})/* 訂閱store的變化 */store.subscribe((mutation, state) => {devtoolHook.emit('vuex:mutation', mutation, state)}) }

如果已經安裝了該插件,則會在windows對象上暴露一個__VUE_DEVTOOLS_GLOBAL_HOOK__。devtoolHook用在初始化的時候會觸發“vuex:init”事件通知插件,然后通過on方法監聽“vuex:travel-to-state”事件來重置state。最后通過Store的subscribe方法來添加一個訂閱者,在觸發commit方法修改mutation數據以后,該訂閱者會被通知,從而觸發“vuex:mutation”事件。

最后

Vuex是一個非常優秀的庫,代碼量不多且結構清晰,非常適合研究學習其內部實現。最近的一系列源碼閱讀也使我自己受益匪淺,寫這篇文章也希望可以幫助到更多想要學習探索Vuex內部實現原理的同學。

關于

作者:染陌

Email:answershuto@gmail.com or answershuto@126.com

Github: https://github.com/answershuto

Blog:http://answershuto.github.io/

知乎主頁:https://www.zhihu.com/people/cao-yang-49/activities

知乎專欄:https://zhuanlan.zhihu.com/ranmo

掘金: https://juejin.im/user/58f87ae844d9040069ca7507

osChina:https://my.oschina.net/u/3161824/blog

轉載請注明出處,謝謝。

歡迎關注我的公眾號

轉載于:https://my.oschina.net/u/3161824/blog/1557971

總結

以上是生活随笔為你收集整理的Vuex源码解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

在线观看视频97 | 日韩欧美一区二区三区视频 | 国产一区观看 | 国产手机av | 国产一区二区免费看 | 久久久久 免费视频 | 91桃色国产在线播放 | 久久九九国产精品 | 中文字幕在线播放一区 | 国产一二区视频 | 国产中年夫妇高潮精品视频 | av福利电影| 五月婷婷综合在线观看 | 国产色视频一区二区三区qq号 | 色香蕉在线视频 | 成人精品视频 | 中文字幕在线看视频国产 | 中文字幕123区 | 97视频在线看 | 色姑娘综合 | 精品美女在线视频 | 国产精品美女999 | 亚洲精品乱码久久久久v最新版 | 99精品久久久久 | 香蕉精品在线观看 | 日韩免费电影网 | 青青河边草手机免费 | 婷婷色网址 | 99视频精品免费观看, | 在线最新av | 99精品美女 | 亚洲综合网 | 99精品在线直播 | 人人玩人人弄 | 黄色av免费电影 | 欧美一级片在线播放 | 亚洲综合色网站 | 日韩黄色影院 | 成人久久久久久久久 | 精品久久1 | 88av视频 | 在线看成人片 | 国产精品久久久久一区二区三区共 | 视频一区亚洲 | 狠狠色噜噜狠狠 | 五月婷婷丁香综合 | 日韩av一卡二卡三卡 | 天天爱天天操天天干 | 日本69hd| 黄色小说视频在线 | 日韩激情视频 | 国产99免费| 日韩在线视频免费播放 | 天天干天天射天天爽 | 九九热视频在线免费观看 | 日韩欧美在线高清 | 在线97| 久久色中文字幕 | 伊人影院得得 | 日日夜夜婷婷 | 五月天亚洲综合小说网 | 亚洲理论在线观看电影 | 91麻豆精品91久久久久同性 | 五月天激情综合网 | 怡红院av久久久久久久 | 成年人视频在线免费 | 色婷婷久久一区二区 | 日本久久久久久久久 | 日韩a在线 | 亚洲国产成人高清精品 | 人人爱人人爽 | av片一区| 男女拍拍免费视频 | 一区二区不卡在线观看 | 国产高清专区 | 国产精品久久电影观看 | 国产黄色精品在线 | 国产99自拍 | 欧美黄色特级片 | 99精品国产在热久久 | 色综合五月 | 午夜少妇一区二区三区 | 粉嫩av一区二区三区四区五区 | 婷婷色5月 | 最新日韩在线观看视频 | 国产999精品| 天天干夜夜干 | 欧美精品xx | 99久久精品国产毛片 | 国产不卡一二三区 | av在线色| 久久这里只精品 | 欧美性生活免费 | 成人免费观看在线视频 | 丁香婷婷久久久综合精品国产 | 国产精品美乳一区二区免费 | 国产精品一区二区三区在线 | 欧美精品在线观看免费 | 成人午夜精品 | 少妇搡bbb | 在线有码中文 | 久久成年人网站 | 麻豆视频在线观看免费 | 伊人午夜| 亚洲精品乱码久久久久久 | 成人91视频| 午夜 久久 tv| 99久久精品国产一区二区三区 | 国产视频一区在线免费观看 | 国产小视频在线观看 | 国产97色在线| 人人草网站 | 国产最新视频在线 | 国产在线观看你懂的 | 91看片在线播放 | 日日干综合 | 一区二区三区在线观看免费视频 | 黄色免费高清视频 | 99视屏 | 亚洲国产精品激情在线观看 | 在线日韩 | 91中文字幕一区 | 精品久久久久久国产偷窥 | 色香天天 | 97视频在线观看视频免费视频 | www.亚洲精品视频 | 天天操夜操视频 | 国产成人久久av977小说 | 久草在线视频首页 | 国产第一页福利影院 | 日韩欧美一区二区不卡 | 91porny九色91啦中文 | 日韩在线观看网站 | 成人黄色电影在线播放 | 免费人成网ww44kk44 | 精品美女在线观看 | 久久99精品久久久久久久久久久久 | 黄色毛片视频免费 | 三上悠亚一区二区在线观看 | 国产精品九九视频 | 欧美一级久久久久 | 久久精品中文 | 狠狠干.com| 久久精品视频在线 | 韩国av免费在线观看 | 五月婷婷六月丁香 | 亚洲一区美女视频在线观看免费 | 国产高清精品在线 | 超碰在线网 | 久草在线电影网 | 中文字幕在线免费观看 | 国产一级片免费视频 | 91视频观看免费 | 亚洲综合一区二区精品导航 | 久草| 首页国产精品 | 国产精品一区二区在线免费观看 | 天天操天天爱天天干 | 在线 日韩 av | 日韩三级视频在线看 | www.天天操.com| 最近日本韩国中文字幕 | 亚洲1区 在线 | 99久久精品一区二区成人 | 久久国产精品免费 | 成人免费视频网站在线观看 | 国产亚洲片 | 又色又爽又黄高潮的免费视频 | 日韩午夜在线 | 亚洲精品乱码久久久久久 | 国产色视频123区 | 中文字幕一区二区三区四区视频 | 激情丁香在线 | 黄色免费观看网址 | 在线免费观看黄色av | 五月天婷婷在线播放 | 国内精自线一二区永久 | 91中文字幕在线播放 | 国精产品满18岁在线 | www久久| 亚洲精品国久久99热 | 毛片1000部免费看 | 久久精品99国产精品亚洲最刺激 | 国语精品免费视频 | 天天在线视频色 | 久久精品这里精品 | av免费在线网站 | 中文字幕国语官网在线视频 | 亚洲精品乱码久久久久v最新版 | 久久久久国 | 一区二区视频在线播放 | 日日麻批40分钟视频免费观看 | 天堂在线一区 | 欧美男男激情videos | 91网页版在线观看 | 热热热热热色 | 国产一区影院 | 天天射色综合 | 色综合久久88色综合天天人守婷 | 亚洲高清精品在线 | 亚洲国产中文字幕在线观看 | 午夜av免费在线观看 | www久| 能在线观看的日韩av | 天天操天天射天天 | 国产精品国产亚洲精品看不卡15 | 一级国产视频 | 中文视频在线看 | 国产视频精选在线 | 人人狠狠综合久久亚洲 | 久久精品一二三区 | 黄色资源在线观看 | 玖操 | av成人动漫在线观看 | 久久久久亚洲精品成人网小说 | 黄色三级视频片 | 国产精品成人在线 | 亚洲精品99久久久久久 | 国产欧美日韩视频 | 国产探花| 中文字字幕在线 | 伊人久久电影网 | 亚洲精品成人网 | 夜夜操狠狠操 | 91精品国产成人观看 | 黄色看片 | 91片黄在线观 | 成人在线免费视频 | 一区二区三区免费在线观看视频 | 亚洲国产精品一区二区久久hs | av在观看| aaawww| 亚洲精品啊啊啊 | 国产精品免费不 | 91在线小视频 | 久久久首页 | 国产字幕在线播放 | 中文字幕在线观看视频一区 | 欧美极品裸体 | 狠狠综合| 日韩成人精品一区二区 | 西西人体www444 | 成人毛片一区二区三区 | 91在线免费观看国产 | 91视频在线观看免费 | 嫩草91影院 | 精品视频久久久 | 国产免费视频一区二区裸体 | 日韩18p| 亚洲精品一区二区三区新线路 | 97人人模人人爽人人少妇 | 国产一区二区午夜 | 国产在线一区二区三区播放 | 国产一区二区免费看 | 人人搞人人搞 | 91九色精品| 国产一级做a爱片久久毛片a | 国产999精品久久久久久 | 日韩高清 一区 | 国产免费又爽又刺激在线观看 | 欧美成人一区二区 | 伊人午夜视频 | 久热久草在线 | 日本在线中文在线 | 精品成人网 | 涩涩伊人| 国产999精品久久久久久麻豆 | 在线观看一区 | 欧美精品在线视频观看 | 久操视频在线免费看 | 国产在线观看你懂得 | 欧美午夜精品久久久久久浪潮 | 午夜精品久久久久久久99热影院 | 国产精品破处视频 | 91精品国产福利 | 玖玖视频 | 久久久亚洲网站 | 天天色播 | 久久情爱| 亚洲人成人在线 | 免费观看国产视频 | 国产一区欧美日韩 | 777视频在线观看 | 久久综合久久伊人 | www.av免费观看 | 国产精品av免费观看 | 欧美色图狠狠干 | 亚洲成人资源网 | 91av免费观看 | 欧美黑人性爽 | 最近中文字幕大全 | 亚洲1区在线 | 久久久受www免费人成 | 午夜久久久精品 | 欧美一级小视频 | 久久精品久久久久久久 | 人人爽人人片 | 天天天天天天天天操 | 欧美日韩一级久久久久久免费看 | 天天伊人网 | 丁香九月激情 | 欧美性大战久久久久 | 国产一级在线视频 | 欧美资源在线观看 | www.香蕉视频| 欧美片网站yy | 久久久久久久久艹 | 成人国产一区二区 | 99在线热播精品免费 | www.久久com | 久久dvd | 亚洲激情综合 | 三级视频日韩 | 亚洲三级av | 日韩免费观看高清 | 久久人人爽人人片 | 久久精品一区二区三区国产主播 | 亚洲国产精品资源 | 久久久国产一区二区三区 | 在线观看视频你懂得 | 日韩视频1区 | 中文字幕高清有码 | 国产色影院 | 在线天堂视频 | 成人黄色免费在线观看 | 91中文在线观看 | 天天天天天干 | 91视频在线免费下载 | 国产呻吟在线 | 麻豆观看 | 9在线观看免费 | 西西www4444大胆视频 | 欧美性色xo影院 | 贫乳av女优大全 | 成人va在线观看 | 久久久黄视频 | 人人草在线视频 | 99久久精品费精品 | 日韩欧美精品在线观看 | 免费看污片 | 国产成人精品一区二区三区福利 | 久久人人爽人人爽人人片 | 激情在线免费视频 | 亚洲欧洲av在线 | 人人爽网站| 亚洲精品一区二区网址 | 午夜视频播放 | 亚洲天天在线 | 天天草网站 | 欧美作爱视频 | 午夜国产在线 | 在线观看中文 | 亚洲午夜精品福利 | 亚洲人精品午夜 | 久久久免费 | 欧美日本一二三 | 免费看片在线观看 | 人人澡人人添人人爽一区二区 | 免费看成人a | 亚洲成人二区 | 91福利视频网站 | 日韩免费电影网站 | 九九九九精品九九九九 | 免费看黄色毛片 | 亚洲综合黄色 | 中文字幕在线观看第一页 | 日本一区二区免费在线观看 | 999在线视频 | 国内久久久久久 | 日韩精品一区二区三区电影 | 国产国语在线 | 人人射人人澡 | 91精品1区2区 | 久青草视频 | 国产成人在线播放 | 91少妇精拍在线播放 | 黄色毛片视频免费 | 人人干人人超 | 婷婷综合电影 | 日本中文字幕系列 | 超碰在线中文字幕 | 欧美婷婷色 | 超碰在线98| 丁香高清视频在线看看 | 91在线观看视频 | 在线观看久久久久久 | 久久亚洲在线 | 毛片一区二区 | 精品一区二区三区久久久 | 五月天视频网站 | 欧美a√大片 | 日本中文字幕在线观看 | 999视频在线观看 | 在线小视频国产 | 51精品国自产在线 | 色婷婷激情网 | 欧美夫妻性生活电影 | 亚洲人久久久 | av最新资源| 国产精品久久久久久久午夜 | 日韩欧美高清一区二区三区 | 亚洲久在线 | 欧美日韩一区二区视频在线观看 | 国产精品一区在线 | 欧美精品久久久久久 | 四虎在线免费观看 | 午夜三级理论 | 欧美久久久久 | 免费在线观看黄网站 | 碰天天操天天 | 日韩一区二区三区高清在线观看 | 人人射人人爽 | 国产黄色视 | 五月婷亚洲| 国产色拍拍拍拍在线精品 | 亚洲精品黄网站 | 91精品婷婷国产综合久久蝌蚪 | 成人黄色片免费 | 欧美伦理一区 | 亚洲人久久久 | 成年人电影毛片 | 免费69视频 | 免费高清在线视频一区· | 久久成人午夜视频 | 国产精品第54页 | 国产精品久久久久久超碰 | 日韩字幕在线 | 久久久久网址 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久成人在线 | 亚洲日本在线一区 | 国产小视频在线观看 | 国产午夜麻豆影院在线观看 | 丁香狠狠| 国产91精品看黄网站在线观看动漫 | 九九免费在线看完整版 | 天天射综合 | 在线观看精品一区 | 国产精品午夜在线观看 | 亚洲综合色站 | av中文字幕免费在线观看 | 久草在线中文视频 | 成年人电影免费在线观看 | 激情在线免费视频 | 久久tv | 久久精品99国产精品酒店日本 | 国产精品久久久久一区二区 | 亚洲国产精久久久久久久 | 狠狠色噜噜狠狠狠狠2022 | 97超碰在线久草超碰在线观看 | 高清av免费看| 六月激情久久 | 91成人天堂久久成人 | 精品国产三级 | 日本精品久久久久中文字幕5 | 国产亚洲永久域名 | 国产精品白虎 | 精品视频123区在线观看 | 国产成人一区在线 | 免费色视频网址 | 九色91福利 | 欧美-第1页-屁屁影院 | 99热国产精品 | 亚洲精品久久久久中文字幕二区 | 国产精品久久一 | 91视频91蝌蚪 | 免费三级大片 | 婷婷丁香综合 | 亚洲人成人99网站 | 国内久久久久久 | 99综合电影在线视频 | 黄色小说在线免费观看 | 亚洲在线网址 | 久章草在线| 日韩一级黄色av | 日韩久久影院 | av免费播放 | 免费在线观看成年人视频 | 久久综合电影 | 国产一级黄大片 | 欧美日韩成人一区 | 日韩毛片一区 | 视频一区二区在线观看 | 日韩欧美高清不卡 | 国产精品 日本 | 日韩在线免费视频 | 99久久er热在这里只有精品15 | 精品国产伦一区二区三区免费 | 91av在线电影| 亚洲精品乱码久久久久久蜜桃动漫 | 国产一级特黄毛片在线毛片 | 亚洲最大成人免费网站 | wwwwwww黄 | 91丨九色丨国产丨porny精品 | 91视频a | 久久露脸国产精品 | 色噜噜噜| 日韩黄色免费 | 91九色视频网站 | 天海翼一区二区三区免费 | 久久综合九色综合97婷婷女人 | 久久www免费视频 | 欧美日韩不卡在线 | 久久国产精品色婷婷 | 国产伦理一区 | 天天天天射 | 亚洲爱爱视频 | 免费观看久久 | 九色视频网站 | www欧美xxxx | 国产精品区免费视频 | 欧美一区视频 | 精品欧美一区二区精品久久 | 夜夜视频| 992tv在线| 欧美日韩在线精品一区二区 | 91桃色在线观看视频 | 四虎永久免费在线观看 | 国产亚洲婷婷 | 亚洲精品国偷拍自产在线观看蜜桃 | 夜夜躁天天躁很躁波 | 国产一区二区精品久久 | 免费69视频| 中文字幕亚洲精品日韩 | 久久系列 | 四虎国产免费 | 婷婷久久网站 | 中文字幕丰满人伦在线 | 韩日电影在线观看 | 亚洲精品字幕在线观看 | 日韩欧美高清在线 | 99精品久久精品一区二区 | 久草网视频 | 一级黄色片毛片 | 国产精品久久久久久久久婷婷 | 91精品一区国产高清在线gif | 碰超在线观看 | 特级毛片在线 | 最近2019好看的中文字幕免费 | 在线视频一区观看 | 少妇视频在线播放 | 五月婷婷激情综合 | 五月在线| 精品国产乱码久久久久久1区2匹 | 这里有精品在线视频 | 色婷婷综合成人av | 国产精品精品国产婷婷这里av | 久久免费视频观看 | 日本高清dvd| 亚洲国产精品视频在线观看 | 日韩三级视频在线观看 | 久草在线精品观看 | 国产精品高清免费在线观看 | 欧美91av| 五月婷在线播放 | 一区二区三区电影在线播 | 日本精品在线看 | 欧美日韩3p | 久久久久久久久久影视 | 国产午夜精品免费一区二区三区视频 | 国产经典av | 国产免费亚洲高清 | 国产精品久久一 | 四虎成人精品永久免费av九九 | 日韩视频免费观看高清完整版在线 | 国产精品久久久久av免费 | 波多野结衣网址 | 综合伊人久久 | 美女国内精品自产拍在线播放 | 精品国产精品久久一区免费式 | 一区二区三区在线观看中文字幕 | 三级黄在线 | 久久精品99国产精品酒店日本 | 亚洲欧美日韩国产精品一区午夜 | 99精品国产高清在线观看 | 亚洲一区二区三区四区在线视频 | 免费观看一级 | 国产精品黄色 | 成人av电影在线观看 | 日日夜夜精品免费 | 一区二区三区在线观看免费视频 | 日韩欧美xxxx | 日韩欧美精品在线视频 | 亚洲精色 | 亚洲精品美女久久久久网站 | 久久精品一区二区 | 亚洲国产精品500在线观看 | 天天色天天上天天操 | 国产一级性生活 | 西西4444www大胆艺术 | 999视频在线播放 | 久久亚洲欧美日韩精品专区 | 国产精品一区二区在线免费观看 | 美女视频黄的免费的 | 久久久wwww | 毛片网免费 | 91网站在线视频 | 亚洲九九精品 | 久久精品国产免费观看 | 美国av大片 | 国产高清不卡在线 | 国产乱老熟视频网88av | 日韩精品视频在线观看网址 | 99热99re6国产在线播放 | 日韩一区二区免费视频 | 日日夜夜天天久久 | 日韩高清一| 亚洲国产小视频在线观看 | 亚洲综合丁香 | 久久精品99久久久久久 | 久久丁香 | 精品国产乱码 | 国产精品一区二区美女视频免费看 | 婷婷综合久久 | 国产午夜av | 亚洲精品456在线播放第一页 | 一本一本久久a久久精品牛牛影视 | 免费在线观看一区二区三区 | 欧美另类xxxxx | 国产精品黑丝在线观看 | 天天综合亚洲 | 激情综合啪 | 久久免费福利 | 久久国产精品一二三区 | 黄色在线观看免费 | 精品久久久免费 | 国产无套一区二区三区久久 | 亚洲国产影院 | 久久久久五月天 | 亚洲三级av| 国产高清不卡一区二区三区 | 国产精品国产三级国产不产一地 | 一区二区 不卡 | 91国内产香蕉 | 成年人国产视频 | 青草视频在线 | 91自拍91| 中文字幕在线观看一区二区 | 精品国产电影一区二区 | 91 在线视频| 四虎影视精品成人 | 精品国产免费人成在线观看 | 午夜av大片 | 高潮久久久 | 99中文字幕在线观看 | 亚洲午夜精品久久久久久久久久久久 | 精品麻豆 | 久久男人视频 | 成人黄色大片在线免费观看 | 国产99久久久国产精品成人免费 | 亚洲网久久 | 中文字幕频道 | 999成人免费视频 | 国产二区视频在线观看 | 最新日韩视频在线观看 | 日日弄天天弄美女bbbb | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 久久免费福利 | 美女网站色在线观看 | 麻豆国产精品视频 | 精品99在线观看 | 91精品国产三级a在线观看 | 国产不卡一二三区 | 午夜精品成人一区二区三区 | 日韩av一区二区在线播放 | 人人爽人人做 | 国产精品大片免费观看 | 婷婷丁香久久五月婷婷 | 在线超碰av| 四虎在线观看 | 五月婷婷黄色网 | 91九色蝌蚪在线 | 在线色视频小说 | 午夜国产成人 | 国产亚洲欧美精品久久久久久 | 久久久受www免费人成 | 激情六月婷婷久久 | 色综合色综合色综合 | 中文一区二区三区在线观看 | 国产亚洲精品久久久久久 | 欧美最猛性xxxxx亚洲精品 | 最近中文字幕完整视频高清1 | av免费电影在线 | 91精品国产入口 | 亚洲激色| 日本精品视频在线观看 | 91高清视频在线 | 超碰99在线 | 91av中文| 欧美性大战久久久久 | a级国产片| 久99热| 麻豆视频在线观看免费 | 婷婷色九月 | 深爱激情综合网 | 日韩高清一区 | 黄色福利网 | 国产精品12 | 成人在线播放av | av网站大全免费 | 欧美午夜一区二区福利视频 | 亚洲一级免费电影 | 中文字幕av电影下载 | 91人人爽人人爽人人精88v | 天堂视频中文在线 | 久久精品视频国产 | 亚洲一一在线 | 亚洲一区二区麻豆 | 欧美a级免费视频 | 夜夜操天天操 | 九九九视频在线 | 色姑娘综合网 | 日韩免费 | 视频一区二区免费 | 国产精品高潮呻吟久久久久 | 色婷婷骚婷婷 | av在线在线| 97在线观视频免费观看 | 国产精品综合久久久久久 | 国内视频在线观看 | 最近能播放的中文字幕 | 高清av免费看 | 成人91在线观看 | 免费在线观看视频一区 | 亚洲久在线 | 国产亚洲成人网 | 亚洲精品电影在线 | 97成人免费视频 | 超碰日韩 | 超碰最新网址 | www.黄色网.com | 在线播放91 | 中文超碰字幕 | 国产精品国产三级国产aⅴ入口 | 久久久久久久99 | 亚洲在线网址 | 97精品国产97久久久久久免费 | 久久精品亚洲一区二区三区观看模式 | 日韩免费av片 | 亚洲综合欧美激情 | 九九视频热 | 亚洲欧洲精品一区二区精品久久久 | 伊人www22综合色 | 国产精品aⅴ | 久久国产精品影片 | 色欧美成人精品a∨在线观看 | 欧美一级大片在线观看 | 亚洲精品一区中文字幕乱码 | 婷婷丁香社区 | 91视频在线免费看 | 久久久久久久久久久久亚洲 | 五月婷婷在线观看 | 久草在线视频网站 | 日本特黄一级片 | 亚洲乱码国产乱码精品天美传媒 | 96精品在线 | 一区二区精品久久 | 免费福利片2019潦草影视午夜 | 日韩在线免费观看视频 | 91网在线观看| 99热精品免费观看 | 国产亚洲精品日韩在线tv黄 | 69久久夜色精品国产69 | 综合网天天| 香蕉97视频观看在线观看 | 国产一区国产二区在线观看 | 欧美精品久 | 成年人视频在线免费播放 | 日韩在线国产精品 | 香蕉视频国产在线观看 | 久久婷婷国产色一区二区三区 | 欧美久久久久久久久 | 亚洲蜜桃在线 | 亚洲国产午夜视频 | 又黄又爽又色无遮挡免费 | 国产探花在线看 | 日韩有码第一页 | 波多野结衣动态图 | 国产成人精品av久久 | 亚洲精品国产精品乱码在线观看 | 成年人免费看片 | 亚洲精品视频在线观看免费 | 欧美a视频在线观看 | 中文字幕亚洲在线观看 | 欧美另类xxx | 精品91| 国产精品原创在线 | 久久久免费看片 | 亚洲精品1区2区3区 超碰成人网 | 国产午夜精品一区二区三区欧美 | 亚洲精品国产视频 | 激情五月播播久久久精品 | 日韩成人看片 | 91成品人影院| 成年人网站免费在线观看 | 四虎国产 | 日韩欧美电影在线 | 国产精品1区2区在线观看 | 亚洲激情视频 | 99视频一区 | 成人小视频在线免费观看 | 伊人天天| 99国产精品视频免费观看一公开 | 日韩一区二区三区免费视频 | 午夜精品电影 | 天天综合中文 | 中文字幕一区二区三区精华液 | 色999五月色 | 欧美久久久久久久久久 | 免费看的黄色小视频 | 麻豆一二三精选视频 | 亚州国产精品 | 97超视频在线观看 | av一级免费 | 久久综合狠狠综合久久狠狠色综合 | 久久午夜电影 | 免费观看一级 | 日本三级在线观看中文字 | 久久综合精品国产一区二区三区 | 不卡av在线免费观看 | 国产精品久久久久久久久岛 | 欧美成人精品欧美一级乱黄 | 国产精品一区二区久久精品爱微奶 | 国产在线一区二区 | 欧美精品一区二区免费 | 国产一级大片在线观看 | 去干成人网 | 久久久久久精 | 国产精品一区二区三区99 | 人人插人人草 | 国产精品一区二区久久 | 在线中文字幕电影 | 高清av中文字幕 | 久免费| 日本69hd| 99久久久久免费精品国产 | 成人黄色片免费看 | 中文字幕在线看视频国产中文版 | 日本成人黄色片 | 伊人资源站 | 久久久亚洲国产精品麻豆综合天堂 | 国产一区二区三区在线 | 精品中文字幕视频 | 天天碰天天操视频 | 国产精品黄色 | 在线视频久 | 我要看黄色一级片 | 国产精品美女久久 | 亚洲人成在线观看 | 国产精品久久久久久999 | 香蕉手机在线 | 在线观看岛国 | 国产精品久久99 | 在线中文日韩 | 中文字幕免费不卡视频 | 国产精品免费观看国产网曝瓜 | 日韩在线 | 91福利小视频 | 黄色午夜网站 | 国内精品视频在线 | 欧洲亚洲女同hd | 夜色在线资源 | 日日夜夜噜 | 成人免费ⅴa | 99久高清在线观看视频99精品热在线观看视频 | 91精品一区二区三区久久久久久 | 91在线视频精品 | 免费福利在线观看 | 99爱精品在线 | 国产在线色视频 | 日韩网站一区二区 | 欧美精品v国产精品v日韩精品 | 96av麻豆蜜桃一区二区 | 国产在线v | 成人一区二区在线 | 久草在线视频网 | 2021国产精品视频 | 瑞典xxxx性hd极品 | 亚洲精品美女久久久久 | 美女网站免费福利视频 | 国产精品成 | 亚州精品一二三区 | 国产精品久久久99 | 又大又硬又黄又爽视频在线观看 | 免费合欢视频成人app | 在线观看免费中文字幕 | 一区在线免费观看 | 日韩av片无码一区二区不卡电影 | 欧美日韩中文在线观看 | 一区二区中文字幕在线播放 | 色狠狠狠 | bayu135国产精品视频 | 五月天网页 | 亚洲精品久久久蜜桃 | 欧美日韩三级在线观看 | 国产精品2019 | 99精品国产成人一区二区 | 免费视频a| 深夜免费小视频 | 久久另类视频 | 日韩中文字幕免费在线播放 | 在线观看你懂的网站 | 欧美日韩大片在线观看 | 日韩欧美在线一区二区 | 天天天色综合a | 久久久精品久久 | 欧美动漫一区二区三区 | 国产小视频在线观看免费 | 天天草天天摸 | 亚洲精品国产拍在线 | 日韩电影在线观看中文字幕 | 操操操com| 日本在线中文 | 久久精品牌麻豆国产大山 | 国产乱对白刺激视频在线观看女王 | 欧美人zozo | 色香网 | 国产一区二区精品在线 | 人人爽爽人人 | 99精品久久久| 午夜美女网站 | 成人九九视频 | 国产亚洲视频在线免费观看 | 亚洲激情p | 欧美日韩免费在线视频 | 色av婷婷| 天天综合网天天综合色 | 五月婷婷激情综合 | 欧洲激情在线 | 久久色亚洲 | 麻豆观看 | 久久久国产精品亚洲一区 | 国产精品资源在线 | 91精品国产99久久久久 | 国产成人免费观看 | 久久免费视频这里只有精品 | 麻豆91在线播放 | 天海翼一区二区三区免费 | 久久久久女教师免费一区 | 色在线网站 | 国产亚洲成av片在线观看 | 国产成人在线观看 | 大片网站久久 | 成人免费一级片 | 久草视频免费在线播放 | 人人澡超碰碰97碰碰碰软件 | 在线观看一区 | 午夜成人影视 | 丁香五婷 | 久久久久免费精品国产小说色大师 | 99爱视频在线观看 | 久久a久久| 精品在线播放视频 | 亚洲aⅴ在线观看 | 色综合久久久网 | 国产视频一区二区三区在线 | 色婷婷成人网 | 日韩在线视频观看 | 国产一在线精品一区在线观看 | 91精品国产乱码久久桃 | 在线免费试看 | 日韩在线视频二区 | 久久午夜免费视频 | 日韩丝袜视频 | 亚洲欧洲精品久久 | 极品美女被弄高潮视频网站 | 在线亚洲高清视频 | 91在线超碰 | 亚洲黄色小说网 | 亚州国产精品视频 | 四虎视频 | 日韩欧美在线免费观看 | 激情婷婷丁香 | 精品国产精品久久一区免费式 | 91免费在线视频 | 一区二区电影网 | 手机av在线网站 | 国产精品久久久久久久久毛片 | 亚洲精品伦理在线 | 91久久久国产精品 | 午夜精品一区二区三区四区 | 中文字幕一区二区三区视频 | 日韩丝袜视频 | 超碰97国产在线 | 精品久久91 | 亚洲精品国偷自产在线91正片 | 国产91九色蝌蚪 | 精品无人国产偷自产在线 | 免费三级网| 欧美一级久久久 | 国产这里只有精品 | 91九色视频在线播放 | www九九热 | 久福利 | 亚洲乱码精品久久久久 | 国产精品乱码久久久 | 国产99久久久国产精品免费二区 | 精品一区二区亚洲 |