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

32個手撕JS,徹底擺脫初級前端(面試高頻)-上篇

開發
作為前端開發,JS是重中之重,最近結束了面試的高峰期,基本上offer也定下來了就等開獎,趁著這個時間總結下32個手撕JS問題,這些都是高頻面試題,完全理解之后定能徹底擺脫初級前端。

[[344056]]

 關于源碼都緊遵規范,都可跑通MDN示例,其余的大多會涉及一些關于JS的應用題和本人面試過程

01.數組扁平化
數組扁平化是指將一個多維數組變為一個一維數組

  1. const arr = [1, [2, [3, [4, 5]]], 6]; 
  2. // => [1, 2, 3, 4, 5, 6] 
  3. 復制代碼 

方法一:使用flat()

  1. const res1 = arr.flat(Infinity); 
  2. 復制代碼 

方法二:利用正則

  1. const res2 = JSON.stringify(arr).replace(/\[|\]/g, '').split(','); 
  2. 復制代碼 

但數據類型都會變為字符串

方法三:正則改良版本

  1. const res3 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']'); 
  2. 復制代碼 

方法四:使用reduce

  1. const flatten = arr => { 
  2.   return arr.reduce((pre, cur) => { 
  3.     return pre.concat(Array.isArray(cur) ? flatten(cur) : cur); 
  4.   }, []) 
  5. const res4 = flatten(arr); 
  6. 復制代碼 

方法五:函數遞歸

  1. const res5 = []; 
  2. const fn = arr => { 
  3.   for (let i = 0; i < arr.length; i++) { 
  4.     if (Array.isArray(arr[i])) { 
  5.       fn(arr[i]); 
  6.     } else { 
  7.       res5.push(arr[i]); 
  8.     } 
  9.   } 
  10. fn(arr); 
  11. 復制代碼 

02.數組去重

  1. const arr = [1, 1, '1', 17, truetruefalsefalse'true''a', {}, {}]; 
  2. // => [1, '1', 17, truefalse'true''a', {}, {}] 
  3. 復制代碼 

方法一:利用Set

  1. const res1 = Array.from(new Set(arr)); 
  2. 復制代碼 

方法二:兩層for循環+splice

  1. const unique1 = arr => { 
  2.   let len = arr.length; 
  3.   for (let i = 0; i < len; i++) { 
  4.     for (let j = i + 1; j < len; j++) { 
  5.       if (arr[i] === arr[j]) { 
  6.         arr.splice(j, 1); 
  7.         // 每刪除一個樹,j--保證j的值經過自加后不變。同時,len--,減少循環次數提升性能 
  8.         len--; 
  9.         j--; 
  10.       } 
  11.     } 
  12.   } 
  13.   return arr; 
  14. 復制代碼 

方法三:利用indexOf

  1. const unique2 = arr => { 
  2.   const res = []; 
  3.   for (let i = 0; i < arr.length; i++) { 
  4.     if (res.indexOf(arr[i]) === -1) res.push(arr[i]); 
  5.   } 
  6.   return res; 
  7. 復制代碼 

當然也可以用include、filter,思路大同小異。

方法四:利用include

  1. const unique3 = arr => { 
  2.   const res = []; 
  3.   for (let i = 0; i < arr.length; i++) { 
  4.     if (!res.includes(arr[i])) res.push(arr[i]); 
  5.   } 
  6.   return res; 
  7. 復制代碼 

方法五:利用filter

  1. const unique4 = arr => { 
  2.   return arr.filter((item, index) => { 
  3.     return arr.indexOf(item) === index
  4.   }); 
  5. 復制代碼 

方法六:利用Map

  1. const unique5 = arr => { 
  2.   const map = new Map(); 
  3.   const res = []; 
  4.   for (let i = 0; i < arr.length; i++) { 
  5.     if (!map.has(arr[i])) { 
  6.       map.set(arr[i], true
  7.       res.push(arr[i]); 
  8.     } 
  9.   } 
  10.   return res; 
  11. 復制代碼 

03.類數組轉化為數組
類數組是具有length屬性,但不具有數組原型上的方法。常見的類數組有arguments、DOM操作方法返回的結果。

方法一:Array.from

  1. Array.from(document.querySelectorAll('div')) 
  2. 復制代碼 

方法二:Array.prototype.slice.call()

  1. Array.prototype.slice.call(document.querySelectorAll('div')) 
  2. 復制代碼 

方法三:擴展運算符

  1. [...document.querySelectorAll('div')] 
  2. 復制代碼 

方法四:利用concat

  1. Array.prototype.concat.apply([], document.querySelectorAll('div')); 
  2. 復制代碼 

04.Array.prototype.filter()

  1. rray.prototype.filter = function(callback, thisArg) { 
  2.   if (this == undefined) { 
  3.     throw new TypeError('this is null or not undefined'); 
  4.   } 
  5.   if (typeof callback !== 'function') { 
  6.     throw new TypeError(callback + 'is not a function'); 
  7.   } 
  8.   const res = []; 
  9.   // 讓O成為回調函數的對象傳遞(強制轉換對象) 
  10.   const O = Object(this); 
  11.   // >>>0 保證len為number,且為正整數 
  12.   const len = O.length >>> 0; 
  13.   for (let i = 0; i < len; i++) { 
  14.     // 檢查i是否在O的屬性(會檢查原型鏈) 
  15.     if (i in O) { 
  16.       // 回調函數調用傳參 
  17.       if (callback.call(thisArg, O[i], i, O)) { 
  18.         res.push(O[i]); 
  19.       } 
  20.     } 
  21.   } 
  22.   return res; 
  23. 復制代碼 

對于>>>0有疑問的:解釋>>>0的作用

05.Array.prototype.map()

  1. Array.prototype.map = function(callback, thisArg) { 
  2.   if (this == undefined) { 
  3.     throw new TypeError('this is null or not defined'); 
  4.   } 
  5.   if (typeof callback !== 'function') { 
  6.     throw new TypeError(callback + ' is not a function'); 
  7.   } 
  8.   const res = []; 
  9.   // 同理 
  10.   const O = Object(this); 
  11.   const len = O.length >>> 0; 
  12.   for (let i = 0; i < len; i++) { 
  13.     if (i in O) { 
  14.       // 調用回調函數并傳入新數組 
  15.       res[i] = callback.call(thisArg, O[i], i, this); 
  16.     } 
  17.   } 
  18.   return res; 
  19. 復制代碼 

06.Array.prototype.forEach()

forEach跟map類似,唯一不同的是forEach是沒有返回值的。

  1. Array.prototype.forEach = function(callback, thisArg) { 
  2.   if (this == null) { 
  3.     throw new TypeError('this is null or not defined'); 
  4.   } 
  5.   if (typeof callback !== "function") { 
  6.     throw new TypeError(callback + ' is not a function'); 
  7.   } 
  8.   const O = Object(this); 
  9.   const len = O.length >>> 0; 
  10.   let k = 0; 
  11.   while (k < len) { 
  12.     if (k in O) { 
  13.       callback.call(thisArg, O[k], k, O); 
  14.     } 
  15.     k++; 
  16.   } 
  17. 復制代碼 

07.Array.prototype.reduce()

  1. Array.prototype.reduce = function(callback, initialValue) { 
  2.   if (this == undefined) { 
  3.     throw new TypeError('this is null or not defined'); 
  4.   } 
  5.   if (typeof callback !== 'function') { 
  6.     throw new TypeError(callbackfn + ' is not a function'); 
  7.   } 
  8.   const O = Object(this); 
  9.   const len = this.length >>> 0; 
  10.   let accumulator = initialValue; 
  11.   let k = 0; 
  12.   // 如果第二個參數為undefined的情況下 
  13.   // 則數組的第一個有效值作為累加器的初始值 
  14.   if (accumulator === undefined) { 
  15.     while (k < len && !(k in O)) { 
  16.       k++; 
  17.     } 
  18.     // 如果超出數組界限還沒有找到累加器的初始值,則TypeError 
  19.     if (k >= len) { 
  20.       throw new TypeError('Reduce of empty array with no initial value'); 
  21.     } 
  22.     accumulator = O[k++]; 
  23.   } 
  24.   while (k < len) { 
  25.     if (k in O) { 
  26.       accumulator = callback.call(undefined, accumulator, O[k], k, O); 
  27.     } 
  28.     k++; 
  29.   } 
  30.   return accumulator; 
  31. 復制代碼 

08.Function.prototype.apply()
第一個參數是綁定的this,默認為window,第二個參數是數組或類數組

  1. Function.prototype.apply = function(context = window, args) { 
  2.   if (typeof this !== 'function') { 
  3.     throw new TypeError('Type Error'); 
  4.   } 
  5.   const fn = Symbol('fn'); 
  6.   context[fn] = this; 
  7.  
  8.   const res = context[fn](...args); 
  9.   delete context[fn]; 
  10.   return res; 
  11. 復制代碼 

09.Function.prototype.call
于call唯一不同的是,call()方法接受的是一個參數列表

  1. Function.prototype.call = function(context = window, ...args) { 
  2.   if (typeof this !== 'function') { 
  3.     throw new TypeError('Type Error'); 
  4.   } 
  5.   const fn = Symbol('fn'); 
  6.   context[fn] = this; 
  7.  
  8.   const res = this[fn](...args); 
  9.   delete this.fn; 
  10.   return res; 
  11. 復制代碼 

10.Function.prototype.bind

  1. Function.prototype.bind = function(context, ...args) { 
  2.   if (typeof this !== 'function') { 
  3.     throw new Error("Type Error"); 
  4.   } 
  5.   // 保存this的值 
  6.   var self = this; 
  7.  
  8.   return function F() { 
  9.     // 考慮new的情況 
  10.     if(this instanceof F) { 
  11.       return new self(...args, ...arguments) 
  12.     } 
  13.     return self.apply(context, [...args, ...arguments]) 
  14.   } 
  15. 復制代碼 

11.debounce(防抖)
觸發高頻時間后n秒內函數只會執行一次,如果n秒內高頻時間再次觸發,則重新計算時間。

  1. const debounce = (fn, time) => { 
  2.   let timeout = null
  3.   return function() { 
  4.     clearTimeout(timeout) 
  5.     timeout = setTimeout(() => { 
  6.       fn.apply(this, arguments); 
  7.     }, time); 
  8.   } 
  9. }; 
  10. 復制代碼 

防抖常應用于用戶進行搜索輸入節約請求資源,window觸發resize事件時進行防抖只觸發一次。

12.throttle(節流)
高頻時間觸發,但n秒內只會執行一次,所以節流會稀釋函數的執行頻率。

  1. const throttle = (fn, time) => { 
  2.   let flag = true
  3.   return function() { 
  4.     if (!flag) return
  5.     flag = false
  6.     setTimeout(() => { 
  7.       fn.apply(this, arguments); 
  8.       flag = true
  9.     }, time); 
  10.   } 
  11. 復制代碼 

節流常應用于鼠標不斷點擊觸發、監聽滾動事件。

13.函數珂里化

  1. 指的是將一個接受多個參數的函數 變為 接受一個參數返回一個函數的固定形式,這樣便于再次調用,例如f(1)(2) 

經典面試題:實現add(1)(2)(3)(4)=10; 、 add(1)(1,2,3)(2)=9;

  1. function add() { 
  2.   const _args = [...arguments]; 
  3.   function fn() { 
  4.     _args.push(...arguments); 
  5.     return fn; 
  6.   } 
  7.   fn.toString = function() { 
  8.     return _args.reduce((sum, cur) => sum + cur); 
  9.   } 
  10.   return fn; 
  11. 復制代碼 

14.模擬new操作
3個步驟:

  1. 以ctor.prototype為原型創建一個對象。
  2. 執行構造函數并將this綁定到新創建的對象上。
  3. 判斷構造函數執行返回的結果是否是引用數據類型,若是則返回構造函數執行的結果,否則返回創建的對象。
  1. function newOperator(ctor, ...args) { 
  2.   if (typeof ctor !== 'function') { 
  3.     throw new TypeError('Type Error'); 
  4.   } 
  5.   const obj = Object.create(ctor.prototype); 
  6.   const res = ctor.apply(obj, args); 
  7.  
  8.   const isObject = typeof res === 'object' && res !== null
  9.   const isFunction = typeof res === 'function'
  10.   return isObject || isFunction ? res : obj; 
  11. 復制代碼 

15.instanceof
instanceof運算符用于檢測構造函數的prototype屬性是否出現在某個實例對象的原型鏈上。

  1. const myInstanceof = (leftright) => { 
  2.   // 基本數據類型都返回false 
  3.   if (typeof left !== 'object' || left === nullreturn false
  4.   let proto = Object.getPrototypeOf(left); 
  5.   while (true) { 
  6.     if (proto === nullreturn false
  7.     if (proto === right.prototype) return true
  8.     proto = Object.getPrototypeOf(proto); 
  9.   } 
  10. 復制代碼 

16.原型繼承
這里只寫寄生組合繼承了,中間還有幾個演變過來的繼承但都有一些缺陷

  1. function Parent() { 
  2.   this.name = 'parent'
  3. function Child() { 
  4.   Parent.call(this); 
  5.   this.type = 'children'
  6. Child.prototype = Object.create(Parent.prototype); 
  7. Child.prototype.constructor = Child; 
  8. 復制代碼 

 

 

責任編輯:姜華 來源: 前端UpUp
相關推薦

2021-06-09 07:01:30

前端CallApply

2021-07-15 14:29:06

LRU算法

2021-09-06 08:13:35

APM系統監控

2021-05-18 07:52:31

PromiseAsyncAwait

2024-08-06 10:16:52

Java AgentJava

2024-12-03 16:49:58

2020-09-17 14:04:32

拷貝

2020-09-15 08:55:07

算法數據基礎

2023-06-25 08:38:09

多線程循環打印

2023-08-02 08:54:58

Java弱引用鏈表

2021-10-31 07:38:37

排序算法代碼

2023-09-18 09:10:11

Golang高性能緩存庫

2020-09-16 14:17:42

flat方法

2025-04-01 08:25:00

OSPF網絡IT

2019-11-26 10:30:11

CSS前端面試題

2015-08-21 10:38:16

編程語言GoC語言

2025-04-03 09:56:40

Python算法開發

2022-04-15 09:23:29

Kubernetes面試題

2021-02-23 12:43:39

Redis面試題緩存
點贊
收藏

51CTO技術棧公眾號

日韩av电影在线网| 亚洲最新av网址| 日韩一二区视频| 精品黑人一区二区三区国语馆| 一区久久精品| 中文字幕精品www乱入免费视频| 一区二区在线免费看| 丝袜中文在线| www国产精品av| 成人做爽爽免费视频| 国产无套粉嫩白浆内谢| 欧美一二区在线观看| 日韩精品一区二区三区视频在线观看| 国产一级大片免费看| 毛片在线能看| 国产高清精品网站| 91tv亚洲精品香蕉国产一区7ujn| 国产中文字幕久久| 亚州av日韩av| 日韩欧美国产一二三区| 欧美两根一起进3p做受视频| av在线免费观看网址| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | a级大片免费看| 丝袜美腿诱惑一区二区三区| 亚洲影院免费观看| 亚洲国产一区在线| 亚洲色大成网站www| 国产最新精品精品你懂的| 欧美亚洲国产精品| 国产亚洲成人精品| 亚洲免费二区| www.99久久热国产日韩欧美.com| 丰满少妇在线观看资源站| 一区二区三区| 精品视频一区二区不卡| 黄在线观看网站| 岛国av在线播放| 亚洲一区二区免费视频| 国产又粗又大又爽的视频| av男人的天堂在线| 中文字幕乱码日本亚洲一区二区| 欧美国产一二三区| 手机在线观看免费av| 国产不卡视频一区| 999热视频| av免费在线观看不卡| 另类的小说在线视频另类成人小视频在线 | 欧美国产一区二区在线| 手机看片国产1024| 9久草视频在线视频精品| 国产精品国产精品国产专区蜜臀ah| 国产wwwxxx| 国产精品自在欧美一区| 成人春色激情网| 国产又粗又猛又黄| 韩日av一区二区| 91免费国产视频| 国产美女明星三级做爰| 激情六月婷婷综合| 91视频8mav| 丰满人妻一区二区三区免费| 成人国产在线观看| 久久综合福利| 岛国在线大片| 亚洲欧洲国产日韩| 国产91在线亚洲| 成年人国产在线观看| 亚洲1区2区3区4区| 777久久久精品一区二区三区| 久久久男人天堂| 日本韩国欧美一区| 一女二男3p波多野结衣| 国产精久久一区二区| 日韩色在线观看| 中文字幕免费高清视频| 久久成人高清| 精品国产一区久久久| 你懂得在线观看| 伊人激情综合| 国产成人精品在线| 国产丝袜在线视频| aaa国产一区| 一本色道久久综合亚洲精品婷婷| av网址在线免费观看| 亚洲韩国一区二区三区| 成人在线看视频| 四虎在线精品| 亚洲精品成人久久| a级片在线观看| 一精品久久久| 日韩男女性生活视频| 国产一区二区小视频| 成人福利视频网站| 日韩av一级大片| 手机av免费在线| 91九色最新地址| 国产在线观看免费播放| 国产欧美日韩一区二区三区四区| 日韩在线观看av| 国产精品一区二区三区四| 久久国产欧美日韩精品| 含羞草久久爱69一区| 1769视频在线播放免费观看| 午夜欧美2019年伦理| 加勒比av中文字幕| 欧美a一欧美| 另类专区欧美制服同性| 欧美日韩综合一区二区三区| 韩国成人精品a∨在线观看| 久久精品日产第一区二区三区乱码 | 亚洲狼人国产精品| 成人小视频在线看| 中文字幕一区日韩精品| 中文字幕9999| 国产精品男女视频| 国产99久久久国产精品潘金网站| 日本在线一区| 中文字幕色婷婷在线视频| 日韩欧美高清一区| 国产在线免费看| 首页欧美精品中文字幕| 国产伦精品一区二区三区| 一广人看www在线观看免费视频| 黑人欧美xxxx| 国产精品嫩草69影院| 国产高清一区二区| 国产精品亚洲片夜色在线| 能在线看的av| 日韩欧美中文在线| 中文在线永久免费观看| 欧美日韩岛国| 91精品黄色| 成人短视频在线| 337p亚洲精品色噜噜| 国内精品卡一卡二卡三| 久久都是精品| 欧美一区1区三区3区公司 | 91无套直看片红桃在线观看| 一区二区激情| 精品乱色一区二区中文字幕| 久久免费电影| 精品国产一区二区三区四区四| 亚洲伦理一区二区三区| 久久国产精品99久久人人澡| 水蜜桃一区二区| 日本黄色一区| 在线看日韩欧美| 最近中文字幕在线观看| 久久精品一区二区三区不卡 | 亚洲欧美日韩视频一区| 九九精品免费视频| 久久免费视频一区| 日本男人操女人| 日韩国产一区| 91久久国产婷婷一区二区| 欧美日本高清| 日韩亚洲欧美在线观看| 久久久久久久久久久久久久久久久| 国产老妇另类xxxxx| 欧美黄色免费网址| 4438全国亚洲精品观看视频| 久久久久久18| 日本福利在线观看| 在线区一区二视频| 色偷偷www8888| 国产不卡高清在线观看视频| 玩弄中年熟妇正在播放| 久久av影视| 91久久夜色精品国产网站| 18+激情视频在线| 亚洲第一网站免费视频| 在线精品免费视| 中文字幕成人网| 中文字幕亚洲影院| 国产一区二区三区四区三区四 | 手机av在线网站| 国产精品草草| 日本一区二区三区视频在线观看 | 久久国产精品久久| 日韩高清成人| 欧美成人精品在线播放| 日本成人动漫在线观看| 欧美视频中文在线看| 日本成人免费在线观看| 岛国精品在线观看| 欧美一级黄色影院| 亚洲字幕久久| 农村寡妇一区二区三区| 日本成人一区二区| 国模精品系列视频| aaa日本高清在线播放免费观看| 日韩一区二区免费在线观看| 日韩欧美成人一区二区三区 | 男人的天堂一区| 国产视频一区二区在线| 国产精品嫩草影视| 鲁大师成人一区二区三区| 一区二区精品国产| 欧美一性一交| av日韩免费电影| 福利一区二区三区视频在线观看| 国内精品久久久久久久| 成人在线免费看| 亚洲精品99久久久久| 在线免费看91| 欧美性高潮床叫视频| 久久久久亚洲AV成人| 国产婷婷色一区二区三区| 日韩精品――色哟哟| 麻豆91在线观看| 99热成人精品热久久66| 国内精品久久久久久久97牛牛 | 黄色录像特级片| 欧美日韩水蜜桃| 国产精品免费观看高清| 日韩专区视频| 国产精品久久999| 美女视频在线免费| 色综合久久悠悠| 欧美激情黑人| 在线成人激情视频| 日韩porn| 日韩精品亚洲视频| 丰满少妇一级片| 日韩一级黄色片| 一区二区精品视频在线观看| 色哟哟国产精品| 可以在线观看av的网站| 亚洲一区在线视频观看| 91成人福利视频| 亚洲欧美日韩国产综合在线| 日韩女同一区二区三区| 2023国产精品| 亚洲色图14p| 99久久免费精品高清特色大片| 污视频网址在线观看| 久久久久国产精品一区三寸| 日本三级免费观看| 国产一区二区三区久久| 免费无码不卡视频在线观看| 亚洲日本欧美| 久久久亚洲精品无码| 一本综合久久| 国产裸体舞一区二区三区 | 久久久久久久高清| 国内精品伊人久久久久av一坑 | 国产欧美精品一区二区色综合| 国产黄色网址在线观看| 国产亚洲精品aa| 2019男人天堂| 亚洲欧美中日韩| 久久久久久久久久久久久女过产乱| 中文字幕亚洲精品在线观看| 日韩精品123区| 亚洲一区在线播放| 国产一级做a爱免费视频| 亚洲1区2区3区视频| 制服.丝袜.亚洲.中文.综合懂色| 欧美色播在线播放| 波多野结衣小视频| 欧美军同video69gay| 国产免费久久久| 日韩欧美亚洲国产另类| 亚洲美女性生活| 亚洲精品中文字| av免费观看一区二区| 色视频www在线播放国产成人| 日本精品一区二区三区在线播放| 另类少妇人与禽zozz0性伦| 日本精品600av| 97热在线精品视频在线观看| 中文字幕在线中文字幕在线中三区 | 黄色一级免费视频| 亚洲成人动漫在线观看| 亚洲成人第一网站| 欧美日韩国产高清一区| a在线观看视频| 亚洲精品视频二区| 在线免费看黄网站| 欧美精品xxx| 国偷自产一区二区免费视频| 国产精品入口尤物| 9l视频自拍九色9l视频成人| 欧美欧美一区二区| 国产精品国产三级国产在线观看| 美女黄色免费看| 三级欧美在线一区| 欧美xxxxxbbbbb| 99久久精品情趣| 天天色天天综合| 午夜av电影一区| 亚洲在线精品视频| 日韩不卡中文字幕| 成人午夜在线影视| 91豆花精品一区| 色8久久久久| 九色91国产| 欧美成人久久| 日本熟妇人妻中出| 床上的激情91.| 丁香六月激情综合| 懂色av中文一区二区三区天美| 在线观看免费视频一区| 亚洲福利视频免费观看| 二区三区在线观看| 国产99视频精品免视看7| 涩涩屋成人免费视频软件| 日韩精品一线二线三线| 亚洲激情一区| 色综合五月婷婷| 欧美国产一区在线| 在线天堂中文字幕| 精品国产sm最大网站免费看| 日本黄色片在线观看| 日韩美女视频中文字幕| 97久久超碰| 男女激烈动态图| 国产自产高清不卡| 欧美另类69xxxx| 欧美性感一类影片在线播放| 天天舔天天干天天操| 久久99久久99精品中文字幕| 成人福利一区二区| 欧美18视频| 国产欧美丝祙| 182在线视频| 亚洲午夜视频在线| 国产极品999| 欧美成人免费在线观看| 欧美亚洲二区| 亚洲综合五月天| 免费视频最近日韩| 婷婷色一区二区三区| 色诱视频网站一区| 免费黄色片在线观看| 97在线观看免费高清| 国产另类在线| 男女日批视频在线观看| 国产91精品一区二区麻豆网站| 日韩三级在线观看视频| 欧美另类高清zo欧美| 日韩精品黄色| 成人黄色免费片| 亚洲最大av| 国产成人精品综合久久久久99| 日韩美女视频19| 国产视频手机在线观看| 欧美精品少妇videofree| 一区二区三区欧洲区| 青青草免费在线视频观看| 国产在线麻豆精品观看| 极品盗摄国产盗摄合集| 欧美成人video| av福利导福航大全在线| 国外成人在线视频网站| 日韩视频一区| 亚洲自拍偷拍一区二区| 色狠狠综合天天综合综合| 国产大片在线免费观看| 国产精品黄色av| 婷婷激情综合| 日本中文字幕有码| 亚洲国产另类av| 欧美成熟毛茸茸| 国产精品视频26uuu| 亚洲成人最新网站| 亚洲911精品成人18网站| 亚洲国产另类精品专区| 黄色在线网站| 成人精品视频久久久久 | 91看片就是不一样| 日本一区二区视频在线观看| 一炮成瘾1v1高h| 国模精品视频一区二区| 久久99国内| 在线观看免费av网址| 亚洲一区二区三区视频在线| 亚洲av毛片成人精品| 国产精品美女视频网站| 欧美一区不卡| 亚洲国产欧美视频| 在线播放欧美女士性生活| cao在线视频| 四虎永久国产精品| 国产999精品久久久久久绿帽| 国产原创视频在线| 精品国产视频在线| 久久99精品国产自在现线| 国产成人精品无码播放| 亚洲黄色av一区| 久久精品a一级国产免视看成人| 91在线观看免费观看| 国产精品女主播一区二区三区| 男女男精品视频网站| 亚洲级视频在线观看免费1级| 久久99国产精品二区高清软件| 亚洲 欧美 综合 另类 中字| 国产女人18毛片水真多成人如厕 | 色中色综合影院手机版在线观看|