国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JavaScript 原型概念深入理解

開(kāi)發(fā) 前端
原型是JavaScript中一個(gè)比較難理解的概念,原型相關(guān)的屬性也比較多,對(duì)象有”[[prototype]]”屬性,函數(shù)對(duì)象有”prototype”屬性,原型對(duì)象有”constructor”屬性。

原型是JavaScript中一個(gè)比較難理解的概念,原型相關(guān)的屬性也比較多,對(duì)象有”[[prototype]]”屬性,函數(shù)對(duì)象有”prototype”屬性,原型對(duì)象有”constructor”屬性。

為了弄清原型,以及原型相關(guān)的這些屬性關(guān)系,就有了這篇文章。

相信通過(guò)這篇文章一定能夠清楚的認(rèn)識(shí)到原型,現(xiàn)在就開(kāi)始原型之旅吧。

認(rèn)識(shí)原型

開(kāi)始原型的介紹之前,首先來(lái)認(rèn)識(shí)一下什么是原型?

在JavaScript中,原型也是一個(gè)對(duì)象,通過(guò)原型可以實(shí)現(xiàn)對(duì)象的屬性繼承,JavaScript的對(duì)象中都包含了一個(gè)” [[Prototype]]”內(nèi)部屬性,這個(gè)屬性所對(duì)應(yīng)的就是該對(duì)象的原型。

“[[Prototype]]”作為對(duì)象的內(nèi)部屬性,是不能被直接訪(fǎng)問(wèn)的。所以為了方便查看一個(gè)對(duì)象的原型,F(xiàn)irefox和Chrome中提供了”__proto__”這個(gè)非標(biāo)準(zhǔn)(不是所有瀏覽器都支持)的訪(fǎng)問(wèn)器(ECMA引入了標(biāo)準(zhǔn)對(duì)象原型訪(fǎng)問(wèn)器”Object.getPrototype(object)”)。

實(shí)例分析

下面通過(guò)一個(gè)例子來(lái)看看原型相關(guān)概念:

  1. function Person(name, age){ 
  2.     this.name = name; 
  3.     this.age = age; 
  4.  
  5.     this.getInfo = function(){ 
  6.         console.log(this.name + " is " + this.age + " years old"); 
  7.     }; 
  8.  
  9. var will = new Person("Will"28); 

在上面的代碼中,通過(guò)了Person這個(gè)構(gòu)造函數(shù)創(chuàng)建了一個(gè)will對(duì)象。下面就通過(guò)will這個(gè)對(duì)象一步步展開(kāi)了解原型。

Step 1: 查看對(duì)象will的原型

通過(guò)下面代碼,可以查看對(duì)象will的原型:

  1. console.log(will.__proto__); 
  2. console.log(will.constructor); 

結(jié)果分析:

  • “Person {}”對(duì)象就是對(duì)象will的原型,通過(guò)Chrome展開(kāi)可以看到,”Person {}”作為一個(gè)原型對(duì)象,也有”__proto__”屬性(對(duì)應(yīng)原型的原型)。

  • 在這段代碼中,還用到了”constructor”屬性。在JavaScript的原型對(duì)象中,還包含一個(gè)”constructor”屬性,這個(gè)屬性對(duì)應(yīng)創(chuàng)建所有指向該原型的實(shí)例的構(gòu)造函數(shù)。

    • 通過(guò)”constructor”這個(gè)屬性,我們可以來(lái)判斷一個(gè)對(duì)象是不是數(shù)組類(lèi)型

      function isArray(myArray) {
          return myArray.constructor.toString().indexOf("Array") > -1;
      }

    • 在這里,will對(duì)象本身并沒(méi)有”constructor”這個(gè)屬性,但是通過(guò)原型鏈查找,找到了will原型(will.__proto__)的”constructor”屬性,并得到了Person函數(shù)。

Step 2: 查看對(duì)象will的原型(will.__proto__)的原型

既然will的原型”Person {}”也是一個(gè)對(duì)象,那么我們就同樣可以來(lái)查看”will的原型(will.__proto__)的原型”。

運(yùn)行下面的代碼:

  1. console.log(will.__proto__ === Person.prototype); 
  2. console.log(Person.prototype.__proto__); 
  3. console.log(Person.prototype.constructor); 
  4. console.log(Person.prototype.constructor === Person); 

結(jié)果分析:

  • 首先看 “will.__proto__ === Person.prototype”,在JavaScript中,每個(gè)函數(shù) 都有一個(gè)prototype屬性,當(dāng)一個(gè)函數(shù)被用作構(gòu)造函數(shù)來(lái)創(chuàng)建實(shí)例時(shí),該函數(shù)的prototype屬性值將被作為原型賦值給所有對(duì)象實(shí)例(也就是設(shè)置 實(shí)例的__proto__屬性),也就是說(shuō),所有實(shí)例的原型引用的是函數(shù)的prototype屬性。了解了構(gòu)造函數(shù)的prototype屬性之后,一定就明白為什么***句結(jié)果為true了。

    • prototype屬性是函數(shù)對(duì)象特有的,如果不是函數(shù)對(duì)象,將不會(huì)有這樣一個(gè)屬性。

  • 當(dāng)通過(guò)”Person.prototype.__proto__”語(yǔ)句獲取will對(duì)象原型的原型時(shí)候,將得到”Object {}”對(duì)象,后面將會(huì)看到所有對(duì)象的原型都將追溯到”Object {}”對(duì)象。

  • 對(duì)于原型對(duì)象”Person.prototype”的”constructor”,根據(jù)前面的介紹,將對(duì)應(yīng)Person函數(shù)本身。

通過(guò)上面可以看到,“Person.prototype”對(duì)象和Person函數(shù)對(duì)象通過(guò)”constructor”和”prototype”屬性實(shí)現(xiàn)了相互引用(后面會(huì)有圖展示這個(gè)相互引用的關(guān)系)

Step 3: 查看對(duì)象Object的原型

通過(guò)前一部分可以看到,will的原型的原型是”Object {}”對(duì)象。實(shí)際上在JavaScript中,所有對(duì)象的原型都將追溯到”Object {}”對(duì)象。

下面通過(guò)一段代碼看看”Object {}”對(duì)象:

  1. console.log(Person.prototype.__proto__ === Object.prototype); 
  2. console.log(typeof Object); 
  3. console.log(Object); 
  4. console.log(Object.prototype); 
  5. console.log(Object.prototype.__proto__); 
  6. console.log(Object.prototype.constructor); 

通過(guò)下面的代碼可以看到:

  • Object對(duì)象本身是一個(gè)函數(shù)對(duì)象。

  • 既然是Object函數(shù),就肯定會(huì)有prototype屬性,所以可以看到”Object.prototype”的值就是”Object {}”這個(gè)原型對(duì)象。

  • 反過(guò)來(lái),當(dāng)訪(fǎng)問(wèn)”Object.prototype”對(duì)象的”constructor”這個(gè)屬性的時(shí)候,就得到了Obejct函數(shù)。

  • 另外,當(dāng)通過(guò)”Object.prototype.__proto__”獲取Object原型的原型的時(shí)候,將會(huì)得到”null”,也就是說(shuō)”Object {}”原型對(duì)象就是原型鏈的終點(diǎn)了。

Step 4: 查看對(duì)象Function的原型

在上面的例子中,Person是一個(gè)構(gòu)造函數(shù),在JavaScript中函數(shù)也是對(duì)象,所以,我們也可以通過(guò)”__proto__”屬性來(lái)查找Person函數(shù)對(duì)象的原型。

  1. console.log(Person.__proto__ === Function.prototype); 
  2. console.log(Person.constructor === Function) 
  3. console.log(typeof Function); 
  4. console.log(Function); 
  5. console.log(Function.prototype); 
  6. console.log(Function.prototype.__proto__); 
  7. console.log(Function.prototype.constructor); 

結(jié)果分析 :

  • 在JavaScript中有個(gè)Function對(duì)象(類(lèi)似Object),這個(gè)對(duì)象本身是個(gè)函數(shù);所有的函數(shù)(包括Function,Object)的原型(__proto__)都是”Function.prototype”。

  • Function對(duì)象作為一個(gè)函數(shù),就會(huì)有prototype屬性,該屬性將對(duì)應(yīng)”function () {}”對(duì)象。

  • Function對(duì)象作為一個(gè)對(duì)象,就有”__proto__”屬性,該屬性對(duì)應(yīng)”Function.prototype”,也就是說(shuō),”Function.__proto__ === Function.prototype”

  • 對(duì)于Function的原型對(duì)象”Function.prototype”,該原型對(duì)象的”__proto__”屬性將對(duì)應(yīng)”Object {}”

對(duì)比prototype和__proto__

對(duì)于”prototype”和”__proto__”這兩個(gè)屬性有的時(shí)候可能會(huì)弄混,”Person.prototype”和”Person.__proto__”是完全不同的。

在這里對(duì)”prototype”和”__proto__”進(jìn)行簡(jiǎn)單的介紹:

  • 對(duì)于所有的對(duì)象,都有__proto__屬性,這個(gè)屬性對(duì)應(yīng)該對(duì)象的原型

  • 對(duì)于函數(shù)對(duì)象,除了__proto__屬性之外,還有prototype屬性,當(dāng)一個(gè)函數(shù)被用作構(gòu)造函數(shù)來(lái)創(chuàng)建實(shí)例時(shí),該函數(shù)的prototype屬性值將被作為原型賦值給所有對(duì)象實(shí)例(也就是設(shè)置實(shí)例的__proto__屬性)

圖解實(shí)例

通過(guò)上面結(jié)合實(shí)例的分析,相信你一定了解了原型中的很多內(nèi)容。

但是現(xiàn)在肯定對(duì)上面例子中的關(guān)系感覺(jué)很凌亂,一會(huì)兒原型,一會(huì)兒原型的原型,還有Function,Object,constructor,prototype等等關(guān)系。

現(xiàn)在就對(duì)上面的例子中分析得到的結(jié)果/關(guān)系進(jìn)行圖解,相信這張圖可以讓你豁然開(kāi)朗。

對(duì)于上圖的總結(jié)如下:

  • 所有的對(duì)象都有”__proto__”屬性,該屬性對(duì)應(yīng)該對(duì)象的原型

  • 所有的函數(shù)對(duì)象都有”prototype”屬性,該屬性的值會(huì)被賦值給該函數(shù)創(chuàng)建的對(duì)象的”__proto__”屬性

  • 所有的原型對(duì)象都有”constructor”屬性,該屬性對(duì)應(yīng)創(chuàng)建所有指向該原型的實(shí)例的構(gòu)造函數(shù)

  • 函數(shù)對(duì)象和原型對(duì)象通過(guò)”prototype”和”constructor”屬性進(jìn)行相互關(guān)聯(lián)

通過(guò)原型改進(jìn)例子

在上面例子中,”getInfo”方法是構(gòu)造函數(shù)Person的一個(gè)成員,當(dāng)通過(guò)Person構(gòu)造兩個(gè)實(shí)例的時(shí)候,每個(gè)實(shí)例都會(huì)包含一個(gè)”getInfo”方法。

var will = new Person("Will", 28);
var wilber = new Person("Wilber", 27);

前面了解到,原型就是為了方便實(shí)現(xiàn)屬性的繼承,所以可以將”getInfo”方法當(dāng)作Person原型(Person.__proto__)的一個(gè)屬性,這樣所有的實(shí)例都可以通過(guò)原型繼承的方式來(lái)使用”getInfo”這個(gè)方法了。

所以對(duì)例子進(jìn)行如下修改:

  1. function Person(name, age){ 
  2.     this.name = name; 
  3.     this.age = age; 
  4.  
  5. Person.prototype.getInfo = function(){ 
  6.     console.log(this.name + " is " + this.age + " years old"); 
  7. }; 

修改后的結(jié)果為:

原型鏈

因?yàn)槊總€(gè)對(duì)象和原型都有原型,對(duì)象的原型指向?qū)ο蟮母?,而父的原型又指向父的父,這種原型層層連接起來(lái)的就構(gòu)成了原型鏈。

在”理解JavaScript的作用域鏈“一文中,已經(jīng)介紹了標(biāo)識(shí)符和屬性通過(guò)作用域鏈和原型鏈的查找。

這里就繼續(xù)看一下基于原型鏈的屬性查找。

屬性查找

當(dāng)查找一個(gè)對(duì)象的屬性時(shí),JavaScript 會(huì)向上遍歷原型鏈,直到找到給定名稱(chēng)的屬性為止,到查找到達(dá)原型鏈的頂部(也就是 “Object.prototype”), 如果仍然沒(méi)有找到指定的屬性,就會(huì)返回 undefined。

看一個(gè)例子:

  1. function Person(name, age){ 
  2.     this.name = name; 
  3.     this.age = age; 
  4.  
  5. Person.prototype.MaxNumber = 9999
  6. Person.__proto__.MinNumber = -9999
  7.  
  8. var will = new Person("Will"28); 
  9.  
  10. console.log(will.MaxNumber); 
  11. // 9999 
  12. console.log(will.MinNumber); 
  13. // undefined 

在這個(gè)例子中分別給”Person.prototype “和” Person.__proto__”這兩個(gè)原型對(duì)象添加了”MaxNumber “和”MinNumber”屬性,這里就需要弄清”prototype”和”__proto__”的區(qū)別了。

“Person.prototype “對(duì)應(yīng)的就是Person構(gòu)造出來(lái)所有實(shí)例的原型,也就是說(shuō)”Person.prototype “屬于這些實(shí)例原型鏈的一部分,所以當(dāng)這些實(shí)例進(jìn)行屬性查找時(shí)候,就會(huì)引用到”Person.prototype “中的屬性。

屬性隱藏

當(dāng)通過(guò)原型鏈查找一個(gè)屬性的時(shí)候,首先查找的是對(duì)象本身的屬性,如果找不到才會(huì)繼續(xù)按照原型鏈進(jìn)行查找。

這樣一來(lái),如果想要覆蓋原型鏈上的一些屬性,我們就可以直接在對(duì)象中引入這些屬性,達(dá)到屬性隱藏的效果。

看一個(gè)簡(jiǎn)單的例子:

  1. function Person(name, age){ 
  2.     this.name = name; 
  3.     this.age = age; 
  4.  
  5. Person.prototype.getInfo = function(){ 
  6.     console.log(this.name + " is " + this.age + " years old"); 
  7. }; 
  8.  
  9. var will = new Person("Will"28); 
  10. will.getInfo = function(){ 
  11.     console.log("getInfo method from will instead of prototype"); 
  12. }; 
  13.  
  14. will.getInfo(); 
  15. // getInfo method from will instead of prototype 

對(duì)象創(chuàng)建方式影響原型鏈

會(huì)到本文開(kāi)始的例子,will對(duì)象通過(guò)Person構(gòu)造函數(shù)創(chuàng)建,所以will的原型(will.__proto__)就是”Person.prototype”。

同樣,我們可以通過(guò)下面的方式創(chuàng)建一個(gè)對(duì)象:

  1. var July = { 
  2.     name: "July"
  3.     age: 28
  4.     getInfo: function(){ 
  5.         console.log(this.name + " is " + this.age + " years old"); 
  6.     }, 
  7.  
  8. console.log(July.getInfo()); 

當(dāng)使用這種方式創(chuàng)建一個(gè)對(duì)象的時(shí)候,原型鏈就變成下圖了,July對(duì)象的原型是”Object.prototype”也就是說(shuō)對(duì)象的構(gòu)建方式會(huì)影響原型鏈的形式。

hasOwnProperty

“hasOwnProperty”是”Object.prototype”的一個(gè)方法,該方法能判斷一個(gè)對(duì)象是否包含自定義屬性而不是原型鏈上的屬性,因?yàn)?rdquo;hasOwnProperty” 是 JavaScript 中***一個(gè)處理屬性但是不查找原型鏈的函數(shù)。

相信你還記得文章最開(kāi)始的例子中,通過(guò)will我們可以訪(fǎng)問(wèn)”constructor”這個(gè)屬性,并得到will的構(gòu)造函數(shù)Person。這里結(jié)合”hasOwnProperty”這個(gè)函數(shù)就可以看到,will對(duì)象并沒(méi)有”constructor”這個(gè)屬性。

從下面的輸出可以看到,”constructor”是will的原型(will.__proto__)的屬性,但是通過(guò)原型鏈的查找,will對(duì)象可以發(fā)現(xiàn)并使用”constructor”屬性。

“hasOwnProperty”還有一個(gè)重要的使用場(chǎng)景,就是用來(lái)遍歷對(duì)象的屬性。

  1. function Person(name, age){ 
  2.     this.name = name; 
  3.     this.age = age; 
  4.  
  5. Person.prototype.getInfo = function(){ 
  6.     console.log(this.name + " is " + this.age + " years old"); 
  7. }; 
  8.  
  9. var will = new Person("Will"28); 
  10.  
  11. for(var attr in will){ 
  12.     console.log(attr); 
  13. // name 
  14. // age 
  15. // getInfo 
  16.  
  17. for(var attr in will){ 
  18.     if(will.hasOwnProperty(attr)){ 
  19.         console.log(attr); 
  20.     } 
  21. // name 
  22. // age 

總結(jié)

本文介紹了JavaScript中原型相關(guān)的概念,對(duì)于原型可以歸納出下面一些點(diǎn):

  • 所有的對(duì)象都有”[[prototype]]”屬性(通過(guò)__proto__訪(fǎng)問(wèn)),該屬性對(duì)應(yīng)對(duì)象的原型

  • 所有的函數(shù)對(duì)象都有”prototype”屬性,該屬性的值會(huì)被賦值給該函數(shù)創(chuàng)建的對(duì)象的”__proto__”屬性

  • 所有的原型對(duì)象都有”constructor”屬性,該屬性對(duì)應(yīng)創(chuàng)建所有指向該原型的實(shí)例的構(gòu)造函數(shù)

  • 函數(shù)對(duì)象和原型對(duì)象通過(guò)”prototype”和”constructor”屬性進(jìn)行相互關(guān)聯(lián)

還有要強(qiáng)調(diào)的是文章開(kāi)始的例子,以及通過(guò)例子得到的一張”普通對(duì)象”,”函數(shù)對(duì)象”和”原型對(duì)象”之間的關(guān)系圖,當(dāng)你對(duì)原型的關(guān)系迷惑的時(shí)候,就想想這張圖(或者重畫(huà)一張當(dāng)前對(duì)象的關(guān)系圖),就可以理清這里面的復(fù)雜關(guān)系了。

通過(guò)這些介紹,相信一定可以對(duì)原型有個(gè)清晰的認(rèn)識(shí)。

 

 

 

責(zé)任編輯:王雪燕 來(lái)源: 田小計(jì)劃
相關(guān)推薦

2012-01-05 15:07:11

JavaScript

2021-02-17 11:25:33

前端JavaScriptthis

2024-07-18 10:12:04

2019-11-05 10:03:08

callback回調(diào)函數(shù)javascript

2013-11-05 13:29:04

JavaScriptreplace

2020-07-24 10:00:00

JavaScript執(zhí)行上下文前端

2011-03-02 12:33:00

JavaScript

2020-12-16 09:47:01

JavaScript箭頭函數(shù)開(kāi)發(fā)

2017-03-28 21:39:41

ErrorsStack trace代碼

2017-04-25 15:30:23

堆棧函數(shù)JavaScript

2020-07-21 08:26:08

SpringSecurity過(guò)濾器

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2023-11-13 16:33:46

2024-09-02 14:12:56

2012-04-12 09:38:21

JavaScript

2020-02-20 14:00:15

JavaScript原型原型鏈

2009-09-25 09:14:35

Hibernate日志

2013-09-22 14:57:19

AtWood

2023-10-19 11:12:15

Netty代碼
點(diǎn)贊
收藏

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

欧美电影在线观看免费| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 亚洲精品欧美一区二区三区| 国产精品日本| 久久久久高清精品| 午夜视频在线观看韩国| 亚洲91久久| 亚洲精品播放| 亚洲欧洲一区二区三区在线观看 | 国产www.大片在线| 色青青草原桃花久久综合 | 亚洲天堂开心观看| 欧美二区乱c少妇| 97久久精品国产| 成人黄色网页| 色综合天天综合狠狠| 中文字幕一区二区三区中文字幕 | 久久五月天婷婷| 国产精品美女久久久久久久久 | 久久久久久久久亚洲| 日韩电影免费观看高清完整版| 成人黄色综合网站| 国产精品久久久久久久av大片| 7777kkkk成人观看| 久久久久久久久蜜桃| 亚洲免费视频观看| 97精品久久久| 特级西西444| 欧美日韩国产成人在线| 亚洲欧美另类国产| a√在线中文网新版址在线| 第一中文字幕在线| 成人激情视屏| 国产一区视频免费观看| 91福利视频在线观看| www.视频一区| 国产精品久久久久久久久妇女| 99re在线视频播放| jlzzjlzz欧美| 极品白浆推特女神在线观看 | 黄色片视频在线观看| 在线日本制服中文欧美| 久久国产日韩欧美| 在线观看免费视频高清游戏推荐| 18视频在线观看| 欧美一区二区三区在线| 国产99久久精品一区二区300| 亚洲成av人片一区二区三区| 中文字幕亚洲影视| 中文在线一二区| 欧美日韩国产精品一区二区不卡中文 | 亚洲综合色在线| 99re6热在线精品视频播放| 1769国产精品视频| 全部免费毛片在线播放网站| 激情小说一区| 高清国语自产拍免费一区二区三区| 91九色成人| 成人天堂噜噜噜| 国产精品多人| 国产一区亚洲二区三区| 综合网五月天| 91热门视频在线观看| 成人观看免费完整观看| 国产一区免费观看| 欧美日韩亚洲视频| 欧美xxx在线观看| 欧美在线一二三区| 在线观看免费高清视频97| 欧美大片国产精品| 日本桃色视频| 亚洲裸体俱乐部裸体舞表演av| 一级片在线观看| 欧美人与物videos| 欧美日韩在线亚洲一区蜜芽| 99精品黄色片免费大全| 国产欧美日韩伦理| 国产二区视频在线播放| 国产欧美一区二区精品忘忧草| 影音先锋在线一区| av电影天堂一区二区在线观看| 欧美日韩精品在线播放| 日本在线不卡视频一二三区| 免费成人av资源网| 99视频免费在线观看| 高清在线成人网| 国产黄色小视频在线| 日韩高清一区二区| av片在线观看永久免费| 中文久久久久久| 91精品黄色片免费大全| 亚洲国产成人久久| 国产**成人网毛片九色 | 日韩在线一级片| 不卡一区视频| 每日更新在线观看av| 污视频在线看网站| 欧美哺乳videos| 国产在线精品自拍| 91精品国产自产91精品| 九色porny视频在线观看| 亚洲精品在线二区| 亚洲区第一页| 成人观看免费完整观看| 亚洲欧美自偷自拍另类| 一区二区三区中文在线观看| 亚洲成色www.777999| 欧美日韩综合精品| 色播亚洲婷婷| 精品欧美激情精品一区| 欧美性猛片aaaaaaa做受| 国产日韩欧美精品综合| 亚洲一区二区av在线| 麻豆免费看一区二区三区| 久草在线视频资源| 国产网站欧美日韩免费精品在线观看| 999精彩视频| 国产精品推荐精品| 亚洲娇小娇小娇小| 欧美亚洲国产bt| 国产精品久久a| 亚州精品天堂中文字幕| 久热国产精品视频| 亚洲午夜激情免费视频| 99久热re在线精品996热视频 | 亚洲国产精选| 成a人片国产精品| 成人免费毛片片v| 国产小视频福利在线| 日韩区欧美区| 少妇精品久久久一区二区三区| 亚洲午夜久久久久久久| 日本一区二区三区视频视频| 午夜精品福利视频| 精品自拍一区| 日本视频不卡| 五月婷婷狠狠操| 麻豆91在线播放| 色帝国亚洲欧美在线| 久久久久亚洲精品中文字幕| 亚洲国产免费| 在线成人直播| 亚洲精品美女久久久| 日韩欧美四区| 麻豆精品久久| 青青草久久网络| 久久99国产精品久久| 日韩午夜精品| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲影院污污.| 国产精品福利电影一区二区三区四区| 国产精品色噜噜| 91在线高清免费观看| 欧美性猛交xxxx免费看久久久| 国产成人看片| 精品成人一区二区三区| 国产呦萝稀缺另类资源| 黑人精品xxx一区一二区| www.精品av.com| 热久久美女精品天天吊色| 一区二区三区四区视频免费观看| 偷拍精品福利视频导航| 在线观看av网页| 亚洲黄色免费| 久久久一区二区三区| 国产精品欧美久久久久一区二区| 蜜桃麻豆www久久国产精品| 2018av在线| 色佬视频在线观看| 色综合亚洲图丝熟| aaaa欧美| 五月天亚洲视频| 国产精品久久在线观看| 日韩手机在线观看视频| 欧美久久一区二区三区| 亚洲在线观看免费| 日韩av电影免费播放| 加勒比色老久久爱综合网| 午夜精品爽啪视频| 亚洲自拍的二区三区| 自拍偷拍亚洲区| 成人免费高清视频在线观看| 97久久精品在线| 少妇av在线| 午夜精品一区二区三区电影天堂 | av在线亚洲男人的天堂| 成年人在线观看视频| 国产精品亚洲四区在线观看| 亚洲欧洲精品一区二区三区| 中文一区二区完整视频在线观看| av日韩一区| 亚洲国产精品成人综合色在线婷婷| 亚洲国产小视频| 自拍偷拍99| 成人在线高清视频| 国产一区二区不卡| 久久精品一区二区三区不卡免费视频| 国产日产一区二区| 暴力调教一区二区三区| 精品国产一区二区三区久久狼黑人 |