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

如何在 JavaScript 對象中嵌入私有成員

開發 開發工具 前端
對于創建真正的私有數據來講,閉包空間屬性(機制)是一個很棒的做法。或許你得面對內存消耗小幅度增加(問題),但就我的看法,這卻很合理 (這個代價可以換取相對于常規方法更高的性能增長)。

最近,我開發一個項目 Angular Cloud Data Connector, 幫助Angular開發者使用云數據,特別是 Azure移動服務, 使用WEB標準,像索引數據庫(indexed DB)。我嘗試建立一種方式,使得JavaScript開發者能將私有成員嵌入到一個對象中。

[[138984]]

我解決這個問題的技術用到了我命名的閉包空間(closure space)。在這篇入門文章中,我要分享的是如何在你的項目中用它,及它對主流瀏覽器的性能和內存的影響。

在深入學習前,咱們先說下,你為什么需要用到私有成員(private members), 還有一種替代方式來模擬私有成員。

如果你想點評本文,盡情推(twitter)我: @deltakosh

1. 為何要用私有成員(Private Members)

當你用JavaScript 創建一個對象時,可以聲明值成員(value members)。 如果你打算控制對它們的讀/寫訪問操作,可以如下聲明: 

  1. var entity = {}; 
  2.  
  3. entity._property = "hello world"
  4. Object.defineProperty(entity, "property", { 
  5.     get: function () { return this._property; }, 
  6.     set: function (value) { 
  7.         this._property = value; 
  8.     }, 
  9.     enumerable: true
  10.     configurable: true 
  11. }); 

這樣實現,你能完全控制讀和寫操作。問題在于_property 成員仍然可以直接訪問和修改。

這也就是為何我們需要更加穩定可靠的方式,聲明私有成員,它智能通過對象的方法來訪問。

#p#

2. 使用閉包空間(Closure Space)

解決方法是使用閉包空間。每當內部函數 (inner fanction) 訪問來自外部函數作用域的變量時,瀏覽器為你分配一段內存空間。有時很取巧,不過就我們的題目來講,這算是一個***的解決方案。

我們在上個代碼版本中添加這個特性:

  1. var createProperty = function (obj, prop, currentValue)  
  2.     Object.defineProperty(obj, prop,  
  3.     { 
  4.             get: function () { return currentValue; }, 
  5.             set: function (value) { 
  6.             currentValue = value; 
  7.                     }, 
  8.                     enumerable: true
  9.                     configurable: true    }); 
  10.                     }  
  11. var entity = {};  
  12. var myVar = "hello world";createProperty(entity, "property", myVar); 

示例中,createProperty 函數有一個 currentValue 變量,存在 get 和 set 方法。此變量會保存到 get 和 set 函數的閉包空間中。現在,只有這兩個函數能看到和更新 currentValue 變量! 任務完成!

唯一需要警惕 caveat,警告,注意)的是源值 (myVar) 仍可訪問。下面給出另一個更健壯的版本(保護 myVar 變量):

  1. var createProperty = function (obj, prop) { 
  2.     var currentValue = obj[prop]; 
  3.     Object.defineProperty(obj, prop, { 
  4.         get: function () { return currentValue; }, 
  5.         set: function (value) { 
  6.             currentValue = value; 
  7.         }, 
  8.         enumerable: true
  9.         configurable: true 
  10.     }); 
  11.  
  12. var entity = { 
  13.     property: "hello world" 
  14. }; 
  15.  
  16. createProperty(entity, "property"); 

采用該函數, 即便源值都銷毀(destructed,注:意思是不能直接賦值)了。到此大功告成了!

#p#

3. 性能考慮Performance Considerations

現在咱們看看性能。

很明顯,比起一個簡單的變量,閉包空間,甚或(對象)屬性要慢的多,且更消耗資源。這就是本文更多關注普通方式和閉包空間機制差異的原因。

為證明閉包空間機制并不比標準方式更消耗資源, 我寫了下面代碼做個基準測試:

 

  1. <!DOCTYPE html> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4.     <title></title> 
  5. </head> 
  6. <style> 
  7.     html { 
  8.         font-family: "Helvetica Neue", Helvetica; 
  9.     } 
  10. </style> 
  11. <body> 
  12.     <div id="results">Computing...</div> 
  13.     <script> 
  14.         var results = document.getElementById("results"); 
  15.         var sampleSize = 1000000; 
  16.         var opCounts = 1000000; 
  17.  
  18.         var entities = []; 
  19.  
  20.         setTimeout(function () { 
  21.             // Creating entities 
  22.             for (var index = 0; index < sampleSize; index++) { 
  23.                 entities.push({ 
  24.                     property: "hello world (" + index + ")" 
  25.                 }); 
  26.             } 
  27.  
  28.             // Random reads 
  29.             var start = new Date().getTime(); 
  30.             for (index = 0; index < opCounts; index++) { 
  31.                 var position = Math.floor(Math.random() * entities.length); 
  32.                 var temp = entities[position].property; 
  33.             } 
  34.             var end = new Date().getTime(); 
  35.  
  36.             results.innerHTML = "<strong>Results:</strong><br>Using member access: <strong>" + (end - start) + "</strong> ms"
  37.         }, 0); 
  38.  
  39.         setTimeout(function () { 
  40.             // Closure space ======================================= 
  41.             var createProperty = function (obj, prop, currentValue) { 
  42.                 Object.defineProperty(obj, prop, { 
  43.                     get: function () { return currentValue; }, 
  44.                     set: function (value) { 
  45.                         currentValue = value; 
  46.                     }, 
  47.                     enumerable: true
  48.                     configurable: true 
  49.                 }); 
  50.             } 
  51.             // Adding property and using closure space to save private value 
  52.             for (var index = 0; index < sampleSize; index++) { 
  53.                 var entity = entities[index]; 
  54.  
  55.                 var currentValue = entity.property; 
  56.                 createProperty(entity, "property", currentValue); 
  57.             } 
  58.  
  59.             // Random reads 
  60.             var start = new Date().getTime(); 
  61.             for (index = 0; index < opCounts; index++) { 
  62.                 var position = Math.floor(Math.random() * entities.length); 
  63.                 var temp = entities[position].property; 
  64.             } 
  65.             var end = new Date().getTime(); 
  66.  
  67.             results.innerHTML += "<br>Using closure space: <strong>" + (end - start) + "</strong> ms"
  68.         }, 0); 
  69.  
  70.         setTimeout(function () { 
  71.             // Using local member ======================================= 
  72.             // Adding property and using local member to save private value 
  73.             for (var index = 0; index < sampleSize; index++) { 
  74.                 var entity = entities[index]; 
  75.  
  76.                 entity._property = entity.property; 
  77.                 Object.defineProperty(entity, "property", { 
  78.                     get: function () { return this._property; }, 
  79.                     set: function (value) { 
  80.                         this._property = value; 
  81.                     }, 
  82.                     enumerable: true
  83.                     configurable: true 
  84.                 }); 
  85.             } 
  86.  
  87.             // Random reads 
  88.             var start = new Date().getTime(); 
  89.             for (index = 0; index < opCounts; index++) { 
  90.                 var position = Math.floor(Math.random() * entities.length); 
  91.                 var temp = entities[position].property; 
  92.             } 
  93.             var end = new Date().getTime(); 
  94.  
  95.             results.innerHTML += "<br>Using local member: <strong>" + (end - start) + "</strong> ms"
  96.         }, 0); 
  97.  
  98.     </script> 
  99. </body> 
  100. </html> 

我創建了一百萬個對象,都有屬性成員。要完成下面三個測試:

  • 執行 1百萬次隨機訪問屬性。

  • 執行1百萬次隨機訪問閉包空間實現版本。

  • 執行1百萬次隨機訪問常規get/set實現版本。

測試結果參見下面表格和圖表:

JavaScript:如何在對象中嵌入私有成員

JavaScript:如何在對象中嵌入私有成員

我們發現,閉包空間實現總是快于常規實現,根據瀏覽器的不同,還可以做進一步的性能優化。

Chrome 上的性能表現低于預期。或許存在 bug,因此,為確認(存在 bug),我聯系了 Google 項目組,描述發生的癥狀。還有,如果你打算測試在 Microsoft Edge —微軟新發布的瀏覽器,在windows10 中默認安裝—中的性能表現,你可以點擊下載 

然而,如果仔細研究,你會發現,使用閉包空間或屬性比直接訪問變量成員要10倍左右。 因此,使用要恰當且謹慎。

JavaScript:如何在對象中嵌入私有成員

#p#

4. 內存占用(Memory Footprint)

我們也得驗證該技術不會消耗過多內存。為測試內存占用基準情況,我寫了下面代碼段:

直接屬性引用版本(Reference Code)

 

  1. var sampleSize = 1000000; 
  2.  var entities = [];  
  3. // Creating entities 
  4. for (var index = 0; index < sampleSize; index++) { 
  5.     entities.push({ 
  6.             property: "hello world (" + index + ")" 
  7. });} 
  8.  
  9. 常規方式版本(Regular Way,get/set) 
  10.  
  11. var sampleSize = 1000000; 
  12.  
  13. var entities = []; 
  14.  
  15. // Adding property and using local member to save private value 
  16. for (var index = 0; index < sampleSize; index++) { 
  17.     var entity = {}; 
  18.  
  19.     entity._property = "hello world (" + index + ")"
  20.     Object.defineProperty(entity, "property", { 
  21.         get: function () { return this._property; }, 
  22.         set: function (value) { 
  23.             this._property = value; 
  24.         }, 
  25.         enumerable: true
  26.         configurable: true 
  27.     }); 
  28.  
  29.     entities.push(entity); 
  30.  
  31. 閉包空間版本(Closure Space Version) 
  32.  
  33. var sampleSize = 1000000; 
  34.  
  35. var entities = []; 
  36.  
  37. var createProperty = function (obj, prop, currentValue) { 
  38.     Object.defineProperty(obj, prop, { 
  39.         get: function () { return currentValue; }, 
  40.         set: function (value) { 
  41.             currentValue = value; 
  42.         }, 
  43.         enumerable: true
  44.         configurable: true 
  45.     }); 
  46.  
  47. // Adding property and using closure space to save private value 
  48. for (var index = 0; index < sampleSize; index++) { 
  49.     var entity = {}; 
  50.  
  51.     var currentValue = "hello world (" + index + ")"
  52.     createProperty(entity, "property", currentValue); 
  53.  
  54.     entities.push(entity); 

之后,我(在三個主流瀏覽器上)運行所有的三段代碼,啟動(瀏覽器)內嵌的內存性能分析器(本示例中使用 F12 工具條):

JavaScript:如何在對象中嵌入私有成員

我計算機上運行的結果如下圖表:

JavaScript:如何在對象中嵌入私有成員

就閉包空間和常規方式,只有 Chrome上,閉包空間(內存占用)表現稍好,在 IE11 和 Firefox上占用內存反而增多,但是瀏覽器的比較結果e—對于現代瀏覽器,用戶很可能不會在意這點差別。

更多 JavaScript 實踐

或許你會吃驚,微軟提供了一批有關開源 Javascript 主題的免費學習材料, 我們正在發起一個任務,關于創建更多 Microsoft Edge 來臨 系列。 查看我的文章:

或者我們團隊系列:

以及一些免費工具:Visual Studio 社區Azure 試用版跨瀏覽器測試工具用于 Mac, Linux, 或者 Windows。

結論(Conclusion)

如你所見,對于創建真正的私有數據來講,閉包空間屬性(機制)是一個很棒的做法。或許你得面對內存消耗小幅度增加(問題),但就我的看法,這卻很合理 (這個代價可以換取相對于常規方法更高的性能增長)。

隨帶說一句, 如果你要自己動手試試,所以代碼可以在 here下載。 推薦一篇不錯的文章, “how-to” on Azure Mobile Services here

責任編輯:王雪燕 來源: oschina
相關推薦

2009-07-22 10:08:48

Javascript私

2010-07-26 09:20:48

C#

2024-04-11 08:30:05

JavaScript數組函數

2020-11-26 08:12:24

JavaScript對象數組

2021-07-09 12:37:31

GoPython編程語言

2023-04-26 15:19:36

JavaScripMap數組

2024-10-22 15:10:49

2022-01-21 10:58:39

JavaScriptGolangPython

2013-03-04 14:35:05

WordPressEdge AnimatHTML5

2021-03-18 10:45:02

JavaScript數組運算符

2021-03-11 23:43:20

JavaScript數組開發

2019-04-23 15:20:26

JavaScript對象前端

2011-03-21 12:41:41

JavaScript

2020-08-23 11:32:21

JavaScript開發技術

2021-06-03 10:00:47

JavaScript 前端數克隆對象

2022-03-15 07:55:09

JavaScript線性儀表圖開發

2018-10-11 09:40:53

前端JavaScript編程語言

2021-03-26 23:41:19

JavaScript對象開發

2011-08-02 10:50:02

ActiveDirec組成員

2022-07-07 07:22:01

瀏覽器JavaScript工具
點贊
收藏

51CTO技術棧公眾號

国产网友自拍视频导航网站在线观看 | 自拍偷拍99| 中文字幕永久免费视频| 日韩欧美一区二区三区免费看| 欧美日韩中文字幕精品| 亚洲午夜激情| 亚洲AV无码精品国产| 99精品免费视频| 亚洲图片制服诱惑| 亚洲综合伊人久久| 精精国产xxxx视频在线播放| 国产丝袜在线精品| 国产在线观看一区二区三区| 免费一级片视频| 欧美日韩看看2015永久免费| 欧美亚洲动漫另类| 日韩国产小视频| 精品久久av| 国产美女在线观看一区| 7777免费精品视频| 欧美性x x x| 日韩高清一级| 91精品国产综合久久精品麻豆| 成人免费毛片在线观看| av每日在线更新| 成人免费看视频| 国产精品com| 免费视频一二三区| 欧美激情另类| 亚洲免费av网址| 三级性生活视频| 卡通欧美亚洲| 亚洲主播在线观看| 亚洲一区二区在线观| 凸凹人妻人人澡人人添| 国产原创一区二区| 国产精品久久久久不卡| 日韩激情在线播放| 欧美欧美全黄| 亚洲欧美在线一区二区| wwwww在线观看| 欧美xxxxxx| 亚洲国产美女搞黄色| 中文一区一区三区免费| 国产亚洲依依| 99国产精品一区| av在线不卡观看| 亚洲视屏在线观看| 久久三级福利| 97视频在线观看播放| 日本天堂中文字幕| 91精品国产91久久久久久密臀| 亚洲视频axxx| 深爱五月激情网| 久久国产精品免费精品3p| 日韩你懂的在线播放| 久久精品一卡二卡| 999精品视频在线观看| 欧美综合在线视频| 国产精品人人妻人人爽人人牛| 日韩影视在线| 亚洲美女免费在线| 日本a级片在线观看| 免费黄色在线看| 欧美极品少妇xxxxⅹ高跟鞋 | 日韩在线精品一区| 国产三级在线观看完整版| 激情五月综合| 伊是香蕉大人久久| 99精品欧美一区二区| 国产乱码精品一区二区亚洲| 亚洲欧洲日本专区| 亚洲午夜久久久久久久国产| 欧美日韩在线观看视频小说| 伊人久久精品视频| 北条麻妃在线观看视频| 亚洲国产精品成人| 久久99久久99精品中文字幕| 久草免费新视频| 亚洲调教视频在线观看| 97国产一区二区精品久久呦 | 国色天香2019中文字幕在线观看| 国产一级特黄毛片| av成人激情| 浅井舞香一区二区| 中文天堂在线播放| 狠狠久久亚洲欧美| 国产精品三区在线| 猫咪在线永久网站| 日韩一区中文字幕| www婷婷av久久久影片| av免费不卡| 一本久道久久综合中文字幕| 婷婷激情四射五月天| 国产精品毛片aⅴ一区二区三区| 日韩天堂在线观看| 久久无码人妻精品一区二区三区| 精品国精品国产自在久国产应用| 久久精品一偷一偷国产| 亚洲激情视频一区| 日本麻豆一区二区三区视频| 亚洲va国产va天堂va久久| 国产 日韩 欧美 精品| 久久综合久久鬼色| 一区二区成人国产精品| 日本h片在线观看| 色婷婷国产精品久久包臀| 日本 片 成人 在线| ccyy激情综合| av午夜精品一区二区三区| 精品麻豆av| aaa在线观看| 夜夜精品浪潮av一区二区三区| 久久精品国产精品亚洲色婷婷| 福利一区和二区| 日韩精品资源二区在线| 久久婷婷五月综合| 欧美视频二区| 国产精品网站大全| 午夜视频1000| 亚洲美女一区二区三区| 日本va中文字幕| 98视频精品全部国产| 宅男66日本亚洲欧美视频| 日本亚洲欧美在线| 久草这里只有精品视频| 鲁鲁狠狠狠7777一区二区| h片在线播放| 在线观看一区二区精品视频| 中文字幕在线视频播放| 久久精品一区二区不卡| 国产精品高潮粉嫩av| 免费看日韩av| 亚洲欧美日韩中文播放| 天天干天天干天天干天天干天天干| 成人av综合网| 久久av红桃一区二区小说| 亚洲中文无码av在线| 97se狠狠狠综合亚洲狠狠| av动漫在线免费观看| 日韩av黄色| 国产亚洲一区二区精品| 可以免费看的av毛片| 高清shemale亚洲人妖| 99热一区二区三区| 狂野欧美性猛交xxxx| 国产亚洲激情视频在线| 免费黄色网址在线| 91伊人久久大香线蕉| 阿v天堂2018| 日本一区二区三区视频在线看| 中文字幕日韩在线播放| 无码人妻精品一区二区三区蜜桃91| 99精品国产99久久久久久白柏| 欧美性潮喷xxxxx免费视频看| 国产精品毛片无码| 久久精品国产精品| 国产免费一区二区三区最新不卡 | 无码人妻少妇色欲av一区二区| 日韩久久久久| 国产精品一区二区三区久久久| 国产精品四虎| 在线观看av一区二区| 五月天精品视频| 日韩精品福利网| 日本高清一区| 97欧美成人| 中文字幕日韩有码| 国产喷水吹潮视频www| 亚洲欧美另类小说视频| 亚洲三级在线视频| 国模大胆一区二区三区| 国产在线精品日韩| 另类图片综合电影| 中文日韩在线视频| 国产伦理吴梦梦伦理| 一区二区视频免费在线观看| 亚洲911精品成人18网站| 激情国产一区| 免费久久99精品国产自| 精品国产黄a∨片高清在线| 色偷偷91综合久久噜噜| 国产男女猛烈无遮挡| 亚洲综合免费观看高清在线观看| 久久久久久久穴| 午夜在线播放视频欧美| 亚洲v日韩v欧美v综合| 国产精品igao视频网网址不卡日韩| 久久av在线播放| 无码精品人妻一区二区| 欧美性一级生活| 黄色a级片在线观看| 成人看片黄a免费看在线| av片中文字幕| 亚洲国产精品成人| 国产青春久久久国产毛片| 希岛爱理一区二区三区av高清| 日韩最新在线视频| 日韩在线观看视频网站| 在线观看一区二区视频| 欧美日韩成人免费观看| 久久噜噜亚洲综合| 中文字幕第一页在线视频| 日韩一区二区久久| 亚洲一区综合| 久久资源综合| 国产剧情久久久久久| 成人观看网址| 日韩在线观看免费高清| 亚洲欧美一区二区三| 欧美日韩国产小视频在线观看| 免费日韩在线视频| 国产精品三级av| 性囗交免费视频观看| 久久99在线观看| 欧美老熟妇喷水| 亚洲成人精品| 日韩精品久久久毛片一区二区| 影音先锋欧美激情| 国产精品一区=区| 国产精选在线| 欧美xxxx18国产| 丁香婷婷在线观看| 亚洲国产天堂网精品网站| 国产乱淫av片免费| 欧美优质美女网站| 成年人午夜视频| 一区二区三区在线观看动漫| 中文字幕第二区| 久久综合色婷婷| 国产人妻精品午夜福利免费| 免费成人在线观看| 国产免费毛卡片| 精品成人在线| 中文字幕乱码一区二区三区| 欧美激情在线精品一区二区三区| 国产精品xxx在线观看www| 国产精品久久久久久av公交车| 国产精品久久久久久久久久免费| 欧美aa在线观看| 欧美—级a级欧美特级ar全黄 | 不卡av电影在线观看| 高清福利在线观看| 亚洲视频在线免费看| 天堂中文在线官网| 精品人在线二区三区| 99热这里精品| 在线91免费看| 亚洲一区二区影视| 欧美日韩综合在线| 中文字幕视频免费观看| 欧美中文字幕不卡| 91丨九色丨海角社区| 色欧美88888久久久久久影院| 国产做受高潮漫动| 精品国产31久久久久久| 国产午夜激情视频| 午夜成人免费视频| 日韩美女视频网站| 精品av在线播放| 国产成人一区二区三区影院在线| 亚洲成人动漫在线观看| 日韩福利片在线观看| 欧美日韩精品在线| 日本视频免费观看| 欧美中文字幕亚洲一区二区va在线 | 美女黄色丝袜一区| 性欧美猛交videos| 久久理论片午夜琪琪电影网| 9999在线视频| 欧美一级淫片丝袜脚交| 精品国产第一福利网站| 国产精品久久久久久久久久ktv| 黄色欧美视频| 91色视频在线导航| 亚洲一二三区视频| 精品一区二区视频| 国产探花在线精品一区二区| 性欧美大战久久久久久久免费观看| 久久国产中文字幕| www.国产二区| 国产欧美日本| 狠狠热免费视频| 捆绑紧缚一区二区三区视频| 污免费在线观看| 不卡的av中国片| a毛片毛片av永久免费| 国内精品伊人久久久久av影院 | 青青草成人在线| 国产另类xxxxhd高清| 国产欧美一区二区三区在线看| 在线高清欧美| 国产91亚洲精品一区二区三区| 四虎884aa成人精品最新| 日本一区视频在线播放| 亚洲字幕久久| 国产91在线免费| 毛片av一区二区| 色哟哟无码精品一区二区三区| 91亚洲大成网污www| 国产成人精品视频免费| 亚洲图片自拍偷拍| 超碰在线97观看| 日韩欧美电影一二三| 你懂的免费在线观看| y97精品国产97久久久久久| 日本成人不卡| 国产精品激情av电影在线观看 | 日韩美女写真福利在线观看| 91成人在线网站| 久草精品电影| 99精品美女| 缅甸午夜性猛交xxxx| 久久精品国产99国产精品| 久久免费精品国产| 国产精品视频九色porn| 欧美精品二区三区| 日韩美女主播在线视频一区二区三区| 欧美69xxxxx| 九九九久久国产免费| 日本综合视频| 国产自产精品| 亚洲欧美偷拍自拍| 久久久精品三级| caoporm超碰国产精品| 污污的视频在线免费观看| 91极品视觉盛宴| 日韩中文字幕观看| 欧美巨猛xxxx猛交黑人97人| 深夜视频一区二区| 久久久久九九九| 黄色欧美成人| 日韩不卡的av| 国产精品毛片高清在线完整版| 久久久精品福利| 精品国产91久久久久久久妲己| 免费a级在线播放| 国产精品久久久999| 亚洲人挤奶视频| 人妻少妇精品久久| 国产99久久精品| 538任你躁在线精品视频网站| 欧美日韩一级视频| 国产在线观看黄| 日本不卡免费高清视频| 日本一区福利在线| 老太脱裤子让老头玩xxxxx| 国产91丝袜在线观看| 欧美成人精品激情在线视频| 欧美另类久久久品| 最新97超碰在线| 国产精品视频色| 欧美日韩激情在线一区二区三区| 国产精品宾馆在线精品酒店| av电影在线观看一区| 国产亚洲精品av| 欧美成人一区二区三区在线观看 | 视频一区二区视频| 精品一区二区综合| 婷婷激情四射网| 在线播放中文一区| av在线导航| 99久久99久久精品国产片| 国产精品www994| 岛国av免费观看| 欧美日韩亚洲91| 久久米奇亚洲| 国产精品亚洲片夜色在线| 亚洲h色精品| 原创真实夫妻啪啪av| 一区二区高清视频在线观看| 国产 日韩 欧美 精品| 欧美性在线观看| 精品盗摄女厕tp美女嘘嘘| 亚洲成人天堂网| 亚洲欧美日韩国产综合在线 | 亚洲国产精品字幕| 中文字幕在线高清| 午夜精品三级视频福利| 国内精品偷拍| 欧美成人精品欧美一级乱| 亚洲国产精品成人综合色在线婷婷| 中文字幕人妻一区二区三区视频| 精品国产一区二区三区久久| 日本亚洲视频| 两根大肉大捧一进一出好爽视频| 久久久www成人免费无遮挡大片| 中文字幕 日韩有码| 久热精品视频在线观看| 久久资源综合| 亚洲精品午夜在线观看| 一区二区三区中文字幕精品精品| 五月婷婷六月激情| 国产精品久久久久免费a∨| 欧美成人一区二免费视频软件| 在线观看av中文字幕| 欧美日韩在线播| 91丝袜在线| 亚洲人一区二区| 成人免费高清在线|