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

前端百題斬之賦值、淺拷貝、深拷貝大PK

開發 前端
相信老鐵們不管是在學習還是面試過程中,都會遇到賦值、淺拷貝、深拷貝,特別是淺拷貝和深拷貝,我記憶比較深刻的遇到這個問題有兩次:1.一次系統寫出bug就是因為對深淺拷貝理解不清楚;2.百度面試。

 [[407599]]

相信老鐵們不管是在學習還是面試過程中,都會遇到賦值、淺拷貝、深拷貝,特別是淺拷貝和深拷貝,我記憶比較深刻的遇到這個問題有兩次:

  • 一次系統寫出bug就是因為對深淺拷貝理解不清楚;
  • 百度面試。

23.1 賦值

賦值指的就是將一個變量直接賦值給另一個變量,如下所示:

  1. const a1 = 10; 
  2. const a2 = a1; 
  3. console.log(a2); // 10 
  4.  
  5. const b1 = { 
  6.     m: 10, 
  7.     n: 20 
  8. }; 
  9.  
  10. const b2 = b1; 
  11. console.log(b2); // { m: 10, n: 20 } 

如上所示,賦值就是將一個值賦給另一個值,在賦值過程中要注意兩點:

對于基本類型賦值就是在棧內存中開辟一個新的存儲區域來存儲新的變量;

對于引用類型賦值,就是將該引用類型的地址,該地址指向堆中的同一值。

23.2 淺拷貝

23.2.1 基本實現

淺拷貝指的就是循環遍歷對象一遍,將該對象上的屬性賦值到另一個對象上。在這個過程中屬性值為基本類型則拷貝的就是基本類型的值;若該值為引用類型,則拷貝的就是就是一個內存地址。

  1. function clone(source) { 
  2.     if (!(typeof source === 'object' && source !== null)) { 
  3.         return source; 
  4.     } 
  5.     const target = {}; // 只考慮Object類型 
  6.     for (let [key, value] of Object.entries(source)) { 
  7.         target[key] = value; 
  8.     } 
  9.  
  10.     return target; 
  11.  
  12. const obj = { 
  13.     a: 10, 
  14.     b: { 
  15.         m: 20 
  16.     } 
  17. }; 
  18.  
  19. const cloneObj = clone(obj); 
  20.  
  21. cloneObj.a = 20; 
  22. cloneObj.b.m = 30; 
  23.  
  24. console.log(obj); // { a: 10, b: { m: 30 } } 
  25. console.log(cloneObj); // { a: 20, b: { m: 30 } } 

上述就是簡單的淺拷貝過程,可以看到淺拷貝就是將原始對象中的值遍歷一層,然后賦值給一個新的對象。在遍歷過程中可以獲取到一下信息:

遍歷到a屬性的時候,其是一個基本類型,所以會在棧內存中創建一個新的存儲區域來存儲變量。

遍歷到b屬性的時候,由于其為引用類型,其會在棧內存中存儲器堆地址,從而指向堆內存中的同一對象。

當通過淺拷貝創建的對象cloneObj中的a屬性和b.m屬性重新賦值,可以發現a屬性值不一樣,但b.m屬性值卻發生了變化,從而驗證了上述1、2兩條分析。

23.2.2 進階

既然本章我們講了淺拷貝,那么不得不了解Object.assign(),該方法就是一個淺拷貝的過程,用于對象的合并,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。

23.2.2.1 基礎

要實現一個函數首先應該了解一個函數,對于該方法的基本使用就不再贅述,下面主要講幾個注意點:

  • 如果目標對象與源對象有同名屬性(或多個源對象有同名屬性),則后面的屬性會覆蓋前面的屬性;
  • 如果只有一個參數,Object.assign會直接返回該參數。如果該參數不是對象,則會先轉為對象,然后再返回;(注意:由于undefined和null無法轉為對象,將它們作為參數會報錯)
  • 非對象參數出現在源對象位置,這些參數會轉化為對象,如果無法轉成對象便跳過(所以undefined和null不會報錯)。(注意:字符串會以數組形式復制到目標對象,其它不會)
  • 只復制源對象的自身屬性(不復制繼承屬性),也不復制不可枚舉的屬性;
  • 屬性名為Symbol值的屬性也會被Object.assign復制。

23.2.2.2 實現

上面闡述了主要的注意點,下面我們就來實現一下Object.assign(),實現步驟如下所示:

  • 對目標對象進行判斷,不能為null和undefined;
  • 將目標轉換為對象(防止string、number等);
  • 獲取后續源對象自身中的可枚舉對象(包含Symbol)復制到目標對象;
  • 返回該處理好的目標對象;
  • 利用Object.defineProperty()將該函數配置為不可枚舉的掛載到Object上。
  1. function ObjectAssign(target, ...sources) { 
  2.     // 對第一個參數進行判斷,不能為undefined和null 
  3.     if (target === undefined || target === null) { 
  4.         throw new TypeError('cannot convert first argument to object'); 
  5.     } 
  6.  
  7.     // 將第一個參數轉換為對象 
  8.     const targetObj = Object(target); 
  9.     // 將源對象(source)自身的所有可枚舉屬性復制到目標對象(target) 
  10.     for (let i = 0; i < sources.length; i++) { 
  11.         let source = sources[i]; 
  12.         // 對于undefined和null在源對象中不會報錯,會直接跳過 
  13.         if (source !== undefined && source !== null) { 
  14.             // 將源角色轉換成對象 
  15.             // 需要將源角色自身的可枚舉屬性(包含Symbol值的屬性)進行復制 
  16.             // Reflect.ownKeys(obj)  返回一個數組,包含對象自身的所有屬性,不管屬性名是Symbol還是字符串,也不管是否可枚舉 
  17.             const keysArrays = Reflect.ownKeys(Object(source)); 
  18.             for (let nextIndex = 0; nextIndex < keysArrays.length; nextIndex++) { 
  19.                 const nextKey = keysArrays[nextIndex]; 
  20.                 // 去除不可枚舉屬性 
  21.                 const desc = Object.getOwnPropertyDescriptor(source, nextKey); 
  22.                 if (desc !== undefined && desc.enumerable) { 
  23.                     targetObj[nextKey] = source[nextKey]; 
  24.                 } 
  25.             } 
  26.         } 
  27.     } 
  28.  
  29.     return targetObj; 
  30.  
  31. // 由于掛載到Object的assign是不可枚舉的,直接掛載上去是可枚舉的,所以采用這種方式 
  32. if (typeof Object.myAssign !== 'function') { 
  33.     Object.defineProperty(Object, "myAssign", { 
  34.         value: ObjectAssign, 
  35.         writable: true
  36.         enumerable: false
  37.         configurable: true 
  38.     }); 
  39.  
  40. const target = { 
  41.     a: 10 
  42. }; 
  43. const source1 = { 
  44.     b: 20, 
  45.     c: 30 
  46. }; 
  47. const source2 = { 
  48.     c: 40 
  49. }; 
  50.  
  51. console.log(Object.assign(target, source1, source2)); // { a: 10, b: 20, c: 40 } 
  52. console.log(Object.myAssign(target, source1, source2)); // { a: 10, b: 20, c: 40 } 

23.3 深拷貝

深拷貝其實就是淺拷貝的進階版,因為淺拷貝只循環遍歷了一層數據,對于引用類型拷貝的是對象的地址,但是深拷貝會進行多層的遍歷,將所有數據進行數據層面的拷貝。下面就利用三種方式實現深拷貝。(這篇文章寫得很好,大家可以一起看一下)

23.3.1 乞丐版

首先來看一下最簡單的深拷貝方式,就是利用JSON.stringify()和JSON.parse(),但是該方式其實是存在很多問題的:

  • 不能正確處理正則表達式,其會變為空對象;
  • 不能正確處理函數,其變為undefined;
  • 不能正常輸出值為undefined的內容。
  1. function cloneDeep(source) { 
  2.     return JSON.parse(JSON.stringify(source)); 
  3.  
  4. const obj = { 
  5.     a: 10, 
  6.     b: undefined, 
  7.     c: /\w/g, 
  8.     d: function() { 
  9.         return true
  10.     } 
  11. }; 
  12. console.log(obj); // { a: 10, b: undefined, c: /\w/g, d: [Function: d] } 
  13. console.log(cloneDeep(obj)); // { a: 10, c: {} } 

23.3.2 遞歸版

既然乞丐版有這么多問題,那么就嘗試一下“淺拷貝+遞歸”的方式實現一下。

  1. function cloneDeep(source) { 
  2.     // 如果輸入的為基本類型,直接返回 
  3.     if (!(typeof source === 'object' && source !== null)) { 
  4.         return source; 
  5.     } 
  6.  
  7.     // 判斷輸入的為數組還是對象,進行對應的創建 
  8.     const target = Array.isArray(source) ? [] : {}; 
  9.      
  10.     for (let [key, value] of Object.entries(source)) { 
  11.         // 此處應該去除一些內置對象,根據需要可以自己去除,本初只去除了RegExp對象 
  12.         if (typeof value === 'object' && value !== null && !(value instanceof RegExp)) { 
  13.             target[key] = cloneDeep(value); 
  14.         } 
  15.         else { 
  16.             target[key] = value; 
  17.         } 
  18.     } 
  19.  
  20.     return target; 
  21.  
  22. const obj = { 
  23.     a: 10, 
  24.     b: undefined, 
  25.     c: /\w/g, 
  26.     d: function() { 
  27.         return true
  28.     }, 
  29.     e: { 
  30.         m: 20, 
  31.         n: 30 
  32.     } 
  33. }; 
  34. const result = cloneDeep(obj); 
  35.  
  36. result.e.m = 100; 
  37.  
  38. console.log('拷貝前:', obj); 
  39. console.log('拷貝后:', result); 

輸出結果如下所示:

23.3.3 循環方式

利用遞歸的方式實現深拷貝,其實是存在爆棧的風險的,下面就將遞歸的方式改為循環的方式。

  1. // 循環方式 
  2. function cloneDeep(source) { 
  3.     if (!(typeof source === 'object' && source !== null)) { 
  4.         return source; 
  5.     } 
  6.  
  7.     const root = Array.isArray(source) ? [] : {}; 
  8.     // 定義一個棧 
  9.     const loopList = [{ 
  10.         parent: root, 
  11.         key: undefined, 
  12.         data: source, 
  13.     }]; 
  14.  
  15.     while (loopList.length > 0) { 
  16.         // 深度優先 
  17.         const node = loopList.pop(); 
  18.         const parent = node.parent; 
  19.         const key = node.key
  20.         const data = node.data; 
  21.  
  22.         // 初始化賦值目標,key為undefined則拷貝到父元素,否則拷貝到子元素 
  23.         let res = parent; 
  24.         if (typeof key !== 'undefined') { 
  25.             res = parent[key] = Array.isArray(data) ? [] : {}; 
  26.         } 
  27.  
  28.         for (let [childKey, value] of Object.entries(data)) { 
  29.             if (typeof value === 'object' && value !== null && !(value instanceof RegExp)) { 
  30.                 loopList.push({ 
  31.                     parent: res, 
  32.                     key: childKey, 
  33.                     data: value 
  34.                 }); 
  35.             } else { 
  36.                 res[childKey] = value; 
  37.             } 
  38.         } 
  39.     } 
  40.  
  41.     return root; 
  42.  
  43. const obj = { 
  44.     a: 10, 
  45.     b: undefined, 
  46.     c: /\w/g, 
  47.     d: function() { 
  48.         return true
  49.     }, 
  50.     e: { 
  51.         m: 20, 
  52.         n: 30 
  53.     } 
  54. }; 
  55. const result = cloneDeep(obj); 
  56.  
  57. result.e.m = 100; 
  58.  
  59. console.log('拷貝前:', obj); 
  60. console.log('拷貝后:', result); 

輸出結果如下所示:

本文轉載自微信公眾號「執鳶者」,可以通過以下二維碼關注。轉載本文請聯系執鳶者公眾號。

 

 

責任編輯:武曉燕 來源: 執鳶者
相關推薦

2021-10-18 09:01:01

前端賦值淺拷貝

2022-09-30 15:03:09

C語言深拷貝淺拷貝

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2017-08-16 13:30:05

Java深拷貝淺拷貝

2021-01-08 06:15:09

深拷貝淺拷貝寫時拷貝

2023-05-17 08:42:46

深拷貝Golang

2009-05-19 17:28:44

深拷貝淺拷貝clone()

2022-07-26 08:07:03

Python淺拷貝深拷貝

2024-03-15 15:03:23

2020-10-12 08:35:22

JavaScript

2021-09-27 11:07:11

深拷貝淺拷貝內存

2024-02-05 22:56:16

C++拷貝開發

2020-06-23 08:41:47

JavaScript開發技術

2020-08-03 08:24:26

原型模式拷貝

2019-02-25 08:58:16

Python深拷貝淺拷貝

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運算符

2021-09-10 07:41:06

Python拷貝Python基礎

2024-04-17 09:01:08

Python深拷貝淺拷貝

2018-09-26 14:37:17

JavaScript前端編程語言
點贊
收藏

51CTO技術棧公眾號

欧美精品黑人性xxxx| 日韩不卡一区二区| 亚洲电影天堂av| 黑人巨大国产9丨视频| 国产精品无码白浆高潮| 欧美天堂亚洲电影院在线观看| 欧美一级片在线| 国产成a人亚洲精v品在线观看| 一级特黄aaa大片| 欧美精品导航| 亚洲精品视频播放| 亚洲成人福利在线| 性欧美video高清bbw| 99久久伊人精品| 国产精品白嫩初高中害羞小美女| 日本视频在线免费| 1204国产成人精品视频| 疯狂蹂躏欧美一区二区精品| 偷拍视频一区二区| 亚洲春色一区二区三区| 久久久久久久高潮| 俺去亚洲欧洲欧美日韩| 中文字幕在线视频一区二区| 成人超碰在线| 国产精品乱码一区二三区小蝌蚪| 91嫩草国产在线观看| 国产婷婷色一区二区在线观看| av永久不卡| 精品少妇一区二区三区日产乱码| 黄色片视频在线免费观看| 久久亚洲天堂| 久久久久久久久久久黄色 | 法国空姐电影在线观看| 高清在线一区二区| 精品福利免费观看| 椎名由奈jux491在线播放| 亚洲欧洲成人在线| 国产成人精品免费| 国产精品美乳一区二区免费 | 欧美在线亚洲综合一区| 亚洲精品中文字幕av| 亚洲男人天堂2021| 精品三区视频| 亚洲一区二区成人在线观看| 亚洲三区在线观看| 免费a级毛片在线观看| 国产精品亚洲午夜一区二区三区| 国产精品18久久久久久麻辣| 欧美黑吊大战白妞| 日韩在线第七页| 亚洲精品电影网站| 国产精品日日摸夜夜爽| 动漫一区二区三区| 欧美日韩精品系列| 成人精品小视频| 天堂网在线最新版www中文网| 亚洲激情网站免费观看| 一区二区欧美日韩| 春暖花开成人亚洲区| 2021国产精品久久精品| 国产一区二区不卡视频| 成人午夜免费福利| 国产成人综合自拍| 亚洲综合成人婷婷小说| 91丨九色丨丰满| 美女在线观看视频一区二区| 日韩美女免费线视频| 久久国产黄色片| 亚洲永久网站| 欧美亚洲另类在线| 欧美bbbbbbbbbbbb精品| 亚洲另类黄色| 日本韩国在线不卡| 老熟妇一区二区三区| 老牛国产精品一区的观看方式| 97精品国产97久久久久久| 中文字幕第28页| 亚洲欧洲另类| 91av视频在线播放| 亚洲黄网在线观看| 久久综合网络一区二区| 国产精品www| 亚洲中文无码av在线| 青娱乐精品视频| 91精品国产自产在线老师啪 | 番号集在线观看| 97国产一区二区| 欧美日韩亚洲在线| 午夜毛片在线| 亚洲乱码国产乱码精品精98午夜 | 男人天堂久久久| 亚洲欧美另类综合偷拍| 久久久天堂国产精品| heyzo高清中文字幕在线| 亚洲成a天堂v人片| www.日日操| 高清一区二区三区av| 欧美日韩aaaaaa| 精品人妻人人做人人爽夜夜爽| 国产调教视频一区| 91国产在线精品| 日韩精品一区不卡| 麻豆传媒一区二区三区| 91精品在线观| 蜜桃久久一区二区三区| 久久综合视频网| 亚洲欧美日韩国产成人综合一二三区| 色三级在线观看| 亚洲一区在线看| 欧美国产激情视频| 国产亚洲字幕| 一区二区三区日韩在线| 日韩经典在线观看| 国产原创一区二区三区| 欧美午夜免费| av今日在线| 欧美一区二区精品| 中文字幕有码在线播放| 中文亚洲免费| 97超碰资源| 秋霞影院午夜丰满少妇在线视频| 午夜精品在线看| 特级黄色片视频| 极品美女一区二区三区| 午夜精品一区二区三区在线| 92久久精品一区二区| 国产色产综合产在线视频| 秋霞无码一区二区| 嗯用力啊快一点好舒服小柔久久| yw.139尤物在线精品视频| 男人天堂视频网| 91香蕉视频mp4| a级黄色小视频| 最新国产精品精品视频| 欧美成人精品激情在线观看 | av黄色一级片| 午夜久久影院| 亚洲v日韩v综合v精品v| 欧美成人二区| 欧美精品乱码久久久久久按摩 | 国内黄色精品| 欧美亚洲视频一区二区| 国产香蕉在线观看| 亚洲一二三四区| 久久久久国产免费| 国产综合久久| 国产精品久久7| 国产精品69xx| 亚洲精品国产精品自产a区红杏吧| 欧美交换国产一区内射| 国产成人一区在线| 国产一区二区片| 风间由美性色一区二区三区四区| 欧美精品久久一区二区| av免费在线不卡| 亚洲精品成人少妇| 国产在线观看免费播放| 亚洲国产免费看| 久久天堂国产精品| 最新日韩三级| 中文字幕亚洲无线码a| 一级黄色大片免费观看| 中文字幕欧美一区| 成人一区二区三区仙踪林| 亚洲第一区色| 欧美精品尤物在线| 亚洲一区导航| 久久久综合av| 玖玖综合伊人| 欧美精品久久天天躁| 黄页网站免费观看| 99久久精品国产一区| 91精品欧美综合在线观看最新| 日本黄色免费观看| 久久精品91| 亚洲国产日韩综合一区| 麻豆国产一区| 98精品在线视频| 中文字幕在线观看日本| 欧美变态口味重另类| 波多野结衣国产| 中文字幕不卡在线| 久久久精品人妻一区二区三区| 影音先锋久久精品| 欧美日韩一区二| 成人激情久久| 69视频在线免费观看| 最新国产在线观看| 精品国产一区二区三区不卡 | 亚洲一区二区三区四区五区午夜| 日韩av电影免费在线观看| 久久69av| 国产精品99久久久久久人| а√中文在线8| 亚洲精品丝袜日韩| 精品人妻一区二区三区蜜桃| 欧美日韩国产中文字幕| 99自拍偷拍视频| 99久久精品99国产精品 | 国产在线一区视频| 欧美国产日本韩| 制服丝袜av在线| 久久se这里有精品| 色综合av综合无码综合网站| 中文字幕一区二区av| 欧美日韩一区二区三区在线观看免| 亚洲精品tv| 国产成人精品久久二区二区| 美女网站视频在线| 久久精品成人一区二区三区| 天堂影院在线| 精品国产一区二区三区四区四| 亚洲图片视频小说| 岛国av一区二区| 精品在线视频免费观看| 国产精品乱码久久久久久| 免费黄色三级网站| 日本aⅴ大伊香蕉精品视频| 欧美精品在线一区二区| 亚洲欧洲综合网| 久久午夜色播影院免费高清| 成人三级做爰av| 喷水一区二区三区| 哪个网站能看毛片| 最近中文字幕在线视频| 亚洲激情网站免费观看| 91香蕉国产视频| 国产日韩成人精品| 可以直接看的无码av| 国产黄色精品网站| 在线免费看v片| 久久99久久99精品免视看婷婷| 韩国日本在线视频| 国产精品久久久久久久免费软件 | 国产在线高清| 亚洲精品永久免费精品| 污视频网站免费观看| 精品三级在线观看| 亚洲国产精品成人久久蜜臀| 日韩欧美一区在线观看| 国产人妻精品一区二区三区| 69p69国产精品| 国产欧美日韩综合精品一区二区三区| 欧美日韩精品一区二区三区四区| 中文字幕人妻丝袜乱一区三区| 91福利精品视频| 中文字幕 国产精品| 在线亚洲精品福利网址导航| 亚洲毛片一区二区三区| 日本高清无吗v一区| 五月天激情四射| 日本道免费精品一区二区三区| 午夜精品一区二| 欧美综合视频在线观看| 中文字幕乱码人妻无码久久 | 国产chinasex对白videos麻豆| 91精品欧美久久久久久动漫| 国产精品久久久久久69| 欧美一区二区三区白人 | 亚洲另类激情图| 毛片免费在线| 中文字幕日韩免费视频| 免费不卡视频| 欧美福利小视频| 蜜桃视频m3u8在线观看| 欧洲日韩成人av| 91伊人久久| 91久久久久久久久久久| jizz久久精品永久免费| 久久久久久久久一区二区| 在线一级成人| 欧美黑粗硬大| 午夜精品99久久免费| 不卡视频观看| 欧美影院在线播放| 欧美va在线观看| 成人在线视频福利| 7m精品国产导航在线| 国产综合 伊人色| 国产传媒欧美日韩成人精品大片| 亚洲一区二区三区四区中文| 女主播福利一区| 91好吊色国产欧美日韩在线| 久久一区二区三区超碰国产精品| 91视频这里只有精品| 丁香亚洲综合激情啪啪综合| 亚洲AV无码国产成人久久| 亚洲欧美日韩久久| 日韩精品手机在线| 欧美精品成人一区二区三区四区| 人妻少妇一区二区三区| 在线精品国产欧美| 97超碰免费在线| 国产一区二区香蕉| 理论片一区二区在线| 亚洲综合欧美日韩| 国产亚洲精品v| av在线网站免费观看| 久久久久久久久久看片| 中文字幕影音先锋| 欧美午夜电影网| 黄色aaa毛片| 中文字幕不卡av| 在线观看网站免费入口在线观看国内| 国产精品揄拍一区二区| 欧美深夜视频| 51xx午夜影福利| 日韩精品91亚洲二区在线观看| 深夜视频在线观看| 国产精品久久午夜| 天天干天天干天天操| 精品久久五月天| av网站网址在线观看| 国产精品高清免费在线观看| 秋霞蜜臀av久久电影网免费| 福利在线小视频| 麻豆高清免费国产一区| 色欲狠狠躁天天躁无码中文字幕| 亚洲一区二区三区四区中文字幕| 91亚洲欧美激情| 国产一区二区动漫| 亚洲一二三四| 精品乱码一区二区三区| 国语精品一区| 超级砰砰砰97免费观看最新一期| 国产精品国产三级国产a | 亚洲一区二区三区免费视频| 亚洲天堂免费av| 中文精品99久久国产香蕉| av资源亚洲| 免费试看一区| 先锋影音久久久| 三级网站在线免费观看| 欧美日韩激情网| 涩涩视频在线观看免费| 91精品国产一区| 开心激情综合| 水蜜桃色314在线观看| 成人综合婷婷国产精品久久蜜臀 | 国产大学生校花援交在线播放| 97成人在线视频| 中国av一区| 日本一极黄色片| 国产拍揄自揄精品视频麻豆| 99久久久无码国产精品免费蜜柚| 亚洲欧洲午夜一线一品| 欧美性猛交xxx高清大费中文| 久久国产精品99久久久久久丝袜| 在线视频精品| 亚洲久久久久久久| 欧洲精品在线观看| 亚洲精品承认| 亚洲综合中文字幕68页| 欧美国内亚洲| 精品人妻在线视频| 日韩欧美高清视频| 国产高清美女一级毛片久久| 国产精品欧美日韩一区二区| 久久视频精品| 佐山爱在线视频| 香蕉成人伊视频在线观看| 色综合成人av| 国产精品亚洲网站| 亚洲人metart人体| 在线免费看黄色片| 日本二三区不卡| 欧美边添边摸边做边爱免费| 亚洲最大av网| 一区二区三区四区五区在线| 国产美女免费网站| 在线观看91av| 高清毛片在线观看| 日韩精品久久久| 精品亚洲国内自在自线福利| 久草国产在线视频| 亚洲毛片一区二区| 久久亚洲精品人成综合网| 成人毛片100部免费看| 91性感美女视频| 一区二区视频网站| 国产69精品久久久久9| 亚洲综合图色| 无套内谢丰满少妇中文字幕| 天天操天天色综合| 香蕉视频网站在线观看| 国产日韩一区二区| 美美哒免费高清在线观看视频一区二区 | 男女超爽视频免费播放| 欧美国产成人精品| 亚洲av综合色区无码一二三区| 欧美一级片在线播放| 香蕉国产精品| 国产美女喷水视频| 日韩一区二区免费在线电影| 天天免费亚洲黑人免费| 日本福利视频网站| 国产精品免费久久久久| 无码精品黑人一区二区三区 | 久本草在线中文字幕亚洲| 国产原创精品在线|