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

淺析JavaScript繼承方式

開發 前端
面向對象的語言多數都支持繼承,繼承最重要的優點就是代碼復用,從而構建大型軟件系統。如果一個類能夠重用另一個類的屬性和或方法,就稱之為繼承。從這個角度來看看JavaScript的繼承方式。

前段時間溫故了下JavaScript 的寫類方式,從這篇開始我們看看JavaScript 的繼承方式。

面向對象的語言多數都支持繼承,繼承最重要的優點就是代碼復用,從而構建大型軟件系統。如果一個類能夠重用另一個類的屬性和或方法,就稱之為繼承。從這個角度來看看JS的繼承方式。JS中繼承方式與寫類方式息息相關。不同的寫類方式造成不同的繼承方式。各種流行JavaScript庫繼承方式也各不相同。從最簡單的復用開始。

1、構造函數方式寫類,通過方法調用復制父類屬性/字段到子類 實現繼承

這里父類,子類都采用構造函數方式寫,不用原型。子類調用父類函數來復制父類的屬性。

  1. /**  
  2.  * 父類Polygon:多邊形  
  3.  * @param {Object} sides  
  4.  */ 
  5. function Polygon(sides) {  
  6.     this.sides = sides;  
  7.     this.setSides = function(s) {this.sides=s;}  
  8. }  
  9.  
  10. /**  
  11.  * 子類Triangle:三角形  
  12.  */ 
  13. function Triangle() {  
  14.     this.tempfun = Polygon;//父類引用賦值給子類的一個屬性tempfun  
  15.     this.tempfun(3);//調用  
  16.     delete this.tempfun;//刪除該屬性  
  17.     this.getArea = function(){};  
  18. }  
  19.  
  20. //new個對象   
  21. var tri = new Triangle();  
  22. console.log(tri.sides);//繼承的屬性  
  23. console.log(tri.setSides);//繼承的方法  
  24. console.log(tri.getArea);//自有的方法  
  25.  
  26. //缺點是對于Triangle的實例對象用instanceof為父類Polygon時是false  
  27. console.log(tri instanceof Triangle);//true  
  28. console.log(tri instanceof Polygon);//false 

因為 JavaScript中具名函數的多種調用方式 ,子類還可以有以下的多種實現方式。只是在子類中調用父類方法不同而已。

  1. function Triangle() {  
  2.     Polygon.call(this,3); //call方式調用父類  
  3.     this.getArea = function(){};      
  4. }  
  5. function Triangle() {  
  6.     Polygon.apply(this,[3]); //apply方式調用父類  
  7.     this.getArea = function(){};  
  8. }  
  9. function Triangle() {  
  10.     var temp = new Polygon(3); //new方式調用父類  
  11.     for(atr in temp) { //全部復制給子類  
  12.         this[atr] = temp[atr];  
  13.     }     
  14.     this.getArea = function(){};  

這種方式的缺點是子類的實例對象用instanceof檢查父類時總是false。這與java中繼承"is a "的關系是違背的。

2、原型方式寫類,原型方式繼承

core JS自身的對象系統就是采用原型方式(prototype based)繼承的。或者說core JS沒有采用常見的類繼承(class based)系統,而是使用原型繼承來實現自己的對象系統。工作中我們也可以用原型方式來實現繼承,代碼復用以構建自己的功能模塊。

  1. /**  
  2.  * 父類Polygon:多邊形  
  3.  *   
  4.  */ 
  5. function Polygon() {}  
  6. Polygon.prototype.sides = 0;  
  7. Polygon.prototype.setSides = function(s) {this.sides=s;}  
  8.  
  9. /**  
  10.  * 子類Triangle:三角形  
  11.  */ 
  12. function Triangle() {}  
  13. Triangle.prototype = new Polygon(); //這是原型繼承關鍵的一句  
  14. Triangle.prototype.getArea = function(){}  
  15.  
  16. //new個對象  
  17. var tri = new Triangle();  
  18. console.log(tri.sides);//繼承的屬性  
  19. console.log(tri.setSides);//繼承的方法  
  20. console.log(tri.getArea);//自有方法  
  21.  
  22. //instanceof測試  
  23. console.log(tri instanceof Triangle);//true,表明該對象是三角形  
  24. console.log(tri instanceof Polygon);//true,表明三角形也是多邊形 

雖然從輸出可以看出子類繼承了父類Polygon的屬性sides和方法setSides,但sides是0,怎么會是三角形呢。還得調用下tri.setSides(3)使之成為三角形。這樣似乎很不方便。不能傳參數,即是原型方式的缺點。優點是正確的維護了"is a"的關系。

3、組合構造函數/原型方式寫類,采用前面種方式繼承

這種方式父類,子類的屬性都掛在構造函數里,方法都掛在原型上。

  1. /**  
  2.  * 父類Polygon:多邊形  
  3.  */ 
  4. function Polygon(sides) {  
  5.     this.sides = sides;  
  6. }  
  7. Polygon.prototype.setSides = function(s) {this.sides=s;}  
  8.  
  9. /**  
  10.  * Triangle 三角形  
  11.  * @param {Object} base 底  
  12.  * @param {Object} height 高  
  13.  */ 
  14. function Triangle(base,height) {  
  15.     Polygon.call(this,3);//復制父類屬性給自己  
  16.     this.base = base;  
  17.     this.height = height;  
  18. }  
  19. Triangle.prototype = new Polygon();//復制父類方法給自己  
  20.  
  21. Triangle.prototype.getArea = function(){ //***定義自己的方法  
  22.     return this.base*this.height/2;  
  23. }  
  24.  
  25. //new個對象  
  26. var tri = new Triangle(12,4);  
  27. console.log(tri.sides);//繼承的屬性  
  28. console.log(tri.setSides);//繼承的方法  
  29. console.log(tri.base);//自有屬性  
  30. console.log(tri.height);//自有屬性  
  31. console.log(tri.getArea);//自有方法  
  32.  
  33. //instanceof測試,表明正確的維護了"is a"的關系  
  34. console.log(tri instanceof Triangle);//true,表明該對象是三角形  
  35. console.log(tri instanceof Polygon);//true,表明三角形也是多邊形 

#p#

這篇開始寫幾個工具函數實現類的擴展。每個工具函數都是針對特定的寫類方式(習慣)。這篇按照構造函數方式寫類:屬性(字段)和方法都掛在this上。以下分別提供了個類,分別作為父類和子類。

  1. //  父類Person  
  2. function Person(nationality) {  
  3.     this.nationality = nationality;  
  4.     this.setNationality = function(n) {this.nationality=n;};  
  5.     this.getNationality = function() {return this.nationality;};  
  6. }  
  7.  
  8. // 類Man  
  9. function Man(name) {  
  10.     this.name = name;  
  11.     this.setName = function(n){this.name=n;};  
  12.     this.getName = function(){return this.name;};  

繼承工具函數一

  1. /**  
  2.  * @param {Function} subCls 子類  
  3.  * @param {Function} superCls 父類  
  4.  * @param {Object} param 父類構造參數  
  5.  */ 
  6. function extend(subCls,superCls,param) {  
  7.     superCls.call(subCls.prototype,param);  

使用如下

  1. extend(Man,Person,'China');  
  2. var m = new Man('jack');  
  3. console.log(m.nationality);//China  
  4. console.log(m.setNationality('Japan'));  
  5. console.log(m.getNationality('Japan'));//Japan 

輸出可以看到Man繼承了Person的屬性及所有方法。這種繼承方式于java的很不一樣哦,

  1. class Animal {  
  2.     int legs;     
  3.     Animal(int l) {  
  4.         legs = l;  
  5.     }  
  6.     int getLegs() {  
  7.         return legs;  
  8.     }  
  9. }  
  10. public class Person extends Animal{  
  11.     //屬性(字段)  
  12.     String name;      
  13.     //構造方法(函數)  
  14.     Person(int legs, String name) {  
  15.         super(legs);//調用父類構造器  
  16.         this.name = name;  
  17.     }     
  18.     //方法  
  19.     String getName() {  
  20.         return this.name;  
  21.     }  
  22.     public static void main(String[] args) {  
  23.           
  24.         Person p = new Person(2,"jack");          
  25.         System.out.println(p.legs);  
  26.     }  

Java中,子類Person在自身構造方法中調用父類構造方法super(legs),創建對象的時候直接將父類構造參數legs:2傳進去,不僅僅只傳自己的name:jack。上面JavaScript繼承是在extend時傳父類構造參數(extend函數的第三個參數),而不是在new Man時將父類構造參數傳過去。好,模擬Java來實現下extend,這里巧妙的在子類上暫存了父類引用。

繼承工具函數二

  1. /**  
  2.  * @param {Function} subCls  
  3.  * @param {Function} superCls  
  4.  */ 
  5. function extend(subCls,superCls) {    
  6.     subCls.supr = superCls;  
  7. }  

還是以Person為父類,來實現子類Woman

  1. function Woman(nationality,name) {  
  2.     Woman.supr.call(this,nationality);//和java有點類似哦,在子類中調用父類構造器  
  3.     this.name = name;  
  4.     this.setName = function(n){this.name=n;};  
  5.     this.getName = function(){return this.name;};  
  6. }<br>extend(Woman,Person);<br> 

***,創建對象的方式和java也類似,即new的時候同時將父類構造參數(nationality:Japan)傳進去。

  1. var w = new Woman('Japan','lily');  
  2. console.log(w.nationality);//Japan  
  3. w.setNationality('U.S.A');  
  4. console.log(w.getNationality());//U.S.A 

繼承工具函數三

  1. /**  
  2.  * @param {Function} subCls  
  3.  * @param {Function} superCls  
  4.  */ 
  5. function extend(subCls,superCls) {  
  6.     subCls.prototype = new superCls();    

父類,按原型方式寫,即屬性和方法都掛在原型上。

  1. /**  
  2.  *  父類Person  
  3.  */ 
  4. function Person(){}  
  5. Person.prototype.nationality = 'China';  
  6. Person.prototype.getNationality = function() {return this.nationality;}  
  7. Person.prototype.setNationality = function(n) { this.nationality = n;} 

子類繼承與父類

  1. function Man() {}  
  2. extend(Man,Person); 

繼承父類的屬性和方法后,再添加子類自有屬性,方法

  1. Man.prototype.name = 'jack';  
  2. Man.prototype.getName = function() { return this.name;}  
  3. Man.prototype.setName = function(n) { this.name=n;} 

測試如下,

  1. var m = new Man();  
  2. console.log(m);  
  3. console.log(m instanceof Person); 

可以看到這種寫類方式,繼承方式完全采用原型機制。

#p#

繼承工具函數四

這種方式是目前比較流行的,51ditu網站的開發就是按照這種模式的。

  1. /**  
  2.  * @param {Function} subCls 子類  
  3.  * @param {Function} superCls 父類  
  4.  */ 
  5. function extend(subCls,superCls) {    
  6.     //暫存子類原型  
  7.     var sbp = subCls.prototype;  
  8.     //重寫子類原型--原型繼承  
  9.     subCls.prototype = new superCls();  
  10.     //重寫后一定要將constructor指回subCls  
  11.     subCls.prototype.constructor = subCls;  
  12.     //還原子類原型  
  13.     for(var atr in sbp) {  
  14.         subCls.prototype[atr] = sbp[atr];  
  15.     }  
  16.     //暫存父類    
  17.     subCls.supr = superCls;  

按 構造函數+原型 方式寫類,即屬性掛在this上,方法掛在prototype上。

  1. /**  
  2.  *  父類Person  
  3.  */ 
  4. function Person(nationality){  
  5.     this.nationality = nationality;  
  6. }  
  7. Person.prototype.getNationality = function() {return this.nationality;}  
  8. Person.prototype.setNationality = function(n) { this.nationality = n;}  
  9.  
  10. /**  
  11.  *  子類Man  
  12.  */ 
  13. function Man(nationality,name) {  
  14.     Man.supr.call(this,nationality); //很重要的一句,調用父類構造器  
  15.     this.name = name;  
  16. }  
  17. Man.prototype.getName = function() {return this.name;}  
  18. Man.prototype.setName = function(n) {this.name=n;} 

注意子類Man中要顯示的調用父類構造器已完成父類的屬性/字段拷貝。

extend調用,創建Man的實例

  1. extend(Man,Person);  
  2. var m = new Man('USA','jack');  
  3. console.log(m);  
  4. m.setName('lily');  
  5. console.log(m.name); 

繼承工具函數五

  1. /**  
  2.  * @param {String} className  
  3.  * @param {String/Function} superClass  
  4.  * @param {Function} classImp  
  5.  */ 
  6. function $class(className, superClass, classImp){  
  7.     if(superClass === "") superClass = Object;  
  8.     var clazz = function(){  
  9.         return function(){  
  10.             if(typeof this.init == "function"){  
  11.                 this.init.apply(this, arguments);  
  12.             }  
  13.         };  
  14.     }();  
  15.     var p = clazz.prototype = new superClass();  
  16.     var _super = superClass.prototype;  
  17.     window[className] = clazz;  
  18.     classImp.apply(p, [_super]);  

定義父類Person

  1. /**  
  2.  * 父類 Person  
  3.  */ 
  4. $class('Person','',function(){  
  5.     this.init = function(name){  
  6.         this.name = name;  
  7.     };  
  8.     this.getName = function(){  
  9.         return this.name;  
  10.     };  
  11.     this.setName = function(name){  
  12.         this.name = name;  
  13.     }  
  14. }); 

子類Man

  1. /**  
  2.  * 子類 Man  
  3.  */ 
  4. $class('Man', Person, function(supr){  
  5.     this.init = function(name, age){  
  6.         supr.init.apply(this,[name]); // 該句很重要  
  7.         this.age = age;  
  8.     };  
  9.     this.getAge = function(){  
  10.         return this.age;  
  11.     };  
  12.     this.setAge = function(age){  
  13.         this.age = age;  
  14.     };  
  15. });  
  16. var m = new Man('Jack',25);  
  17. console.log(m.name); // Jack  
  18. console.log(m.age); // 25 

從輸出看可以看到子類Man的確繼承了父類的屬性和方法。

原文鏈接:http://www.cnblogs.com/snandy/archive/2011/03/09/1977804.html

【編輯推薦】

  1. 如何編寫高質量的Javascript代碼
  2. 淺析JavaScript的寫類方式
  3. JavaScript跨域總結與解決辦法
  4. JavaScript版幾種常見排序算法分享
  5. 10個令人驚奇的HTML5和JavaScript效果
責任編輯:陳貽新 來源: snandy的博客
相關推薦

2011-03-07 09:41:10

JavaScript

2017-06-26 10:35:58

前端JavaScript繼承方式

2011-03-08 09:15:04

JavaScript

2009-09-25 14:12:16

Hibernate繼承

2020-04-28 10:05:33

JavaScript繼承前端

2010-01-21 13:48:30

C++基類

2012-02-14 09:45:02

JavaScript

2011-08-31 14:48:33

JavaScript

2010-09-28 14:12:50

Javascript

2017-07-21 09:40:35

Python類、繼承和多態

2009-08-13 18:15:06

C#繼承構造函數

2009-06-17 14:55:26

Hibernate數據

2011-08-24 13:56:27

JavaScript

2021-12-04 11:17:32

Javascript繼承編程

2021-07-27 22:56:00

JavaScript編程開發

2009-07-14 11:34:42

MyEclipse斷點JavaScript

2009-09-07 05:24:22

C#窗體繼承

2009-06-25 17:24:06

Hibernate主鍵

2010-02-06 17:39:52

C++ strtok

2013-09-18 14:01:46

JavaScript
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩网站| 国产精品激情| 久久综合影视| 欧美午夜精品免费| 久久成人av网站| 日本xxxxxxxxxx75| 手机福利小视频在线播放| 四虎国产精品免费久久5151| 成人免费高清视频| 一区二区三区视频在线| 很污的网站在线观看| 天天干天天草天天射| 婷婷精品进入| 色婷婷久久久久swag精品| 成人国产精品日本在线| 国产jjizz一区二区三区视频| 久久香蕉av| 久久99国产精品久久99| 亚洲视频在线观看网站| 久久99中文字幕| 搞黄视频在线观看| 蘑菇福利视频一区播放| 亚洲精品一区二区三区四区高清| 在线观看日韩羞羞视频| 九九热最新视频| 日本久久成人网| 亚洲一二三区在线观看| 亚洲xxx视频| 国产精品免费人成网站酒店| 成人在线视频免费看| 久久婷婷综合激情| 91精品国产自产91精品| 无码av免费精品一区二区三区| 求av网址在线观看| 久久超级碰视频| 97高清免费视频| 国产高潮视频在线观看| 精品精品导航| 国产精品电影一区二区| 国产精品三级久久久久久电影| 中文字幕免费看| 欧美xxx性| 久久精品亚洲国产奇米99| 欧美一级视频一区二区| 一区二区伦理片| 国偷自产av一区二区三区| 一区二区三区精品在线| 国产精品久久久久久久天堂第1集| 欧美日韩大片在线观看| 盗摄牛牛av影视一区二区| 欧美日韩一区国产| 三年中国中文在线观看免费播放 | 亚欧洲精品视频| 亚洲精品影院在线观看| 日韩精品免费综合视频在线播放 | 精品国产91亚洲一区二区三区www| 青青草精品在线视频| 日韩黄色av| 亚洲一区二区三区国产| 一区二区在线高清视频| 69久久夜色| 国产精品亚洲专一区二区三区| 色综合久久天天综线观看| 国产伦精品一区二区三区精品| 亚洲a成人v| 欧美丰满一区二区免费视频| 天堂8在线天堂资源bt| 水莓100在线视频| www.欧美色图| 国产精品久久电影观看| 任我爽在线视频| 视频精品一区| 日韩欧美高清dvd碟片| 国产在线青青草| 成a人片在线观看www视频| 韩国欧美一区二区| 午夜精品免费视频| 亚洲国产精一区二区三区性色| 妖精一区二区三区精品视频 | 一级全黄裸体免费视频| 黄色精品免费| 国内精品久久影院| а天堂中文在线资源| 色综合狠狠操| 亚洲精品v欧美精品v日韩精品| 色悠悠久久综合网| 高清视频在线观看三级| 中文字幕免费一区| 超碰97在线资源| 依依成人在线视频| 欧美日韩精品| 日韩在线不卡视频| 波多野结衣一本| 少妇精品久久久一区二区| 精品国免费一区二区三区| 8x8x最新地址| 国模冰冰炮一区二区| 亚洲最新视频在线播放| 欧美三级一级片| 国产精品一区二区免费福利视频| 精品久久中文字幕| 欧美一级中文字幕| 免费大片黄在线观看视频网站| 亚洲精品第1页| 一区二区三区免费看| 酒色婷婷桃色成人免费av网| 不卡的看片网站| 国产精品国产一区二区| 青青草视频免费在线观看| 成人sese在线| 日韩电影在线播放| 免费观看成年在线视频网站| 国产精品国产三级国产普通话99| 欧美国产视频一区| 色豆豆成人网| 在线观看亚洲一区| 男人透女人免费视频| 天堂中文在线播放| 精品国产精品自拍| 最新免费av网址| 日韩成人精品一区二区三区| 亚洲精品一区二区三区蜜桃下载| 在线免费看视频| 日本欧美国产| 中文字幕日韩综合av| 女人黄色一级片| 久久激情电影| 亚洲一区www| 非洲一级黄色片| 亚洲国产日本| 亚洲一区精品电影| www.av网站| 国产99久久精品| 官网99热精品| 天天干天天插天天操| 日韩美女视频一区二区 | 久久在线视频| 国产va免费精品高清在线| 亚洲AV无码成人精品区东京热| 亚洲精品123区| 亚洲一区二区中文字幕| 在线免费看av| 欧美性欧美巨大黑白大战| avtt香蕉久久| 成人毛片免费看| 91av在线看| 天堂中文在线资源| 亚洲成人动漫av| aaa毛片在线观看| 乱中年女人伦av一区二区| 亚洲性av网站| 天天操天天操天天操天天| 日韩电影在线一区二区三区| 国产精自产拍久久久久久| www.久久久久久| 成人免费一区二区三区视频| 污色网站在线观看| 国产在线一区不卡| 精品亚洲一区二区三区四区五区| 在线观看亚洲大片短视频| 久久午夜精品| 欧洲精品亚洲精品| 超碰在线免费播放| 天天影视网天天综合色在线播放| 亚洲v在线观看| 国精品一区二区三区| 高清不卡日本v二区在线| 麻豆av在线免费观看| 精品精品国产高清a毛片牛牛| 久久成人国产精品入口| www.日本不卡| 成年网站在线免费观看| 亚洲一区二区av| 亚洲精品黄网在线观看| 成年人免费看毛片| 久久97超碰色| 水蜜桃在线免费观看| 亚洲伦乱视频| 久久国内精品一国内精品| 在线观看日韩中文字幕| 久久精品视频一区| 亚洲久久中文字幕| 亚洲午夜视频| 欧洲在线视频一区| 粉嫩一区二区三区在线观看| 久久久久久久久久久久久久久久久久av| 波多野结衣一本一道| 亚洲三级在线免费观看| 亚洲性生活网站| 伊甸园亚洲一区| 国产精品狼人色视频一区| 18网站在线观看| 制服丝袜亚洲网站| 五月婷婷婷婷婷| 国产精品亚洲人在线观看| 亚洲午夜精品久久久久久人妖| 成人高清电影网站| 国产免费高清一区| 亚洲丝袜精品| 欧美一区二区福利视频| 亚洲毛片亚洲毛片亚洲毛片| 国产91对白在线观看九色| 免费日韩视频在线观看| 影音先锋日韩在线| 亚洲aaaaaa| 国产调教在线| 最近更新的2019中文字幕| 91香蕉在线视频| 欧美国产精品专区| 美女又黄又免费的视频| 欧美激情1区2区3区| 国产日韩欧美中文| av黄色在线观看| 欧美区一区二区三区| 国产中年熟女高潮大集合| 一区在线播放| 91精品国产综合久久香蕉的用户体验 | 天堂av网手机版| 国产一区二区精品在线观看| 日本不卡在线观看| 国产精品亚洲欧美一级在线| 97香蕉超级碰碰久久免费的优势| 欧美视频综合| 精品成人一区二区三区| 伊人精品在线视频| 午夜精品福利视频网站| 老熟妇精品一区二区三区| 免费黄网站欧美| 九一国产精品视频| 综合激情网...| 久久久久久噜噜噜久久久精品| 青青草在线播放| 亚洲国产成人精品女人久久久 | 啦啦啦免费高清视频在线观看| 中文字幕一区不卡| 欧美bbbbb性bbbbb视频| 影音先锋久久久| 久久久久久久久久久久久久一区| 中文一区一区三区高中清不卡免费| 自拍偷拍亚洲欧美| 婷婷国产在线| 亚洲黄色在线观看| 国产黄色片免费| 国产精品国产三级国产专播品爱网| 久久出品必属精品| 亚洲国产国产亚洲一二三| 亚洲狠狠婷婷综合久久久| 视频91a欧美| 国产成人aa精品一区在线播放| 在线视频cao| 欧美激情免费观看| 风流老熟女一区二区三区| 亚洲一区在线观看视频| 欧美日韩精品一区二区三区视频播放| 中文字幕国产一区二区| 丰满圆润老女人hd| 欧美激情一区二区三区| 中文字幕 欧美日韩| 久久蜜桃精品| 国产午夜大地久久| 国产精品一页| 欧美成人蜜桃| 中文字幕av一区二区三区佐山爱| 欧洲s码亚洲m码精品一区| 91福利在线免费| 日韩成人激情视频| 神马久久高清| 精品无人区太爽高潮在线播放| 天堂在线视频免费| 国产亚洲成av人片在线观看桃| 久青青在线观看视频国产| 亚洲夜晚福利在线观看| 免费在线观看av片| 免费91麻豆精品国产自产在线观看| 99久久夜色精品国产亚洲| 56国语精品自产拍在线观看| 一级特黄色大片| 欧美一级欧美一级在线播放| www.综合色| 亚洲成色999久久网站| 天天操天天干天天爽| 亚洲视频欧美视频| 午夜老司机在线观看| 日韩精品一区二区在线| 天天操天天射天天舔| 精品视频久久久久久| 国产免费a∨片在线观看不卡| 久久中文精品视频| 538在线视频| 国产成人精品在线| 日本在线一区二区三区| 国产一区福利视频| 国产一区二区电影在线观看| 特级毛片在线免费观看| 欧美在线91| 免费在线a视频| 日韩av电影免费观看高清完整版| 三级av免费看| 99精品国产热久久91蜜凸| 亚洲精品20p| 国产亚洲毛片| 欧美一级裸体视频| 国产91在线看| 久久美女免费视频| 日韩美女精品在线| 免费观看日批视频| 亚洲高清一区二区三区| 成人毛片在线播放| 日韩欧美在线网站| 欧美色综合一区二区三区| 中文字幕日韩精品在线观看| 色在线视频观看| 成人做爽爽免费视频| 日韩超碰人人爽人人做人人添| 亚洲影院色无极综合| 欧美大胆a级| 亚洲 国产 欧美一区| 国产一区二区三区日韩精品| 久草免费福利在线| 狠狠88综合久久久久综合网| 欧美黄色一级片视频| 不卡的电视剧免费网站有什么| 九九九视频在线观看| 亚洲一区二区三区美女| 在线观看视频二区| 欧美日韩综合在线| 黄色福利在线观看| 亚洲天堂网站在线观看视频| 99riav视频在线观看| 成人免费看黄网站| 日韩精品dvd| 日批视频在线免费看| 国产福利精品导航| 日本精品在线免费观看| 日韩欧美中文第一页| 超碰超碰超碰超碰| 亚洲成**性毛茸茸| 黄色网在线免费看| 久久精品国产电影| 国产a亚洲精品| 免费亚洲一区二区| 亚洲黄色视屏| 亚洲av成人片无码| 一区二区三区在线观看视频| 在线免费av片| 久久精品国产2020观看福利| 成人激情视屏| 日本一区免费看| 久久国产精品99国产| www.日本高清| 日韩美女视频一区二区| 精品国产无码一区二区| 日韩中文字幕免费看| 亚洲一二三四| 日本电影一区二区三区| 国产精品日韩久久久| 伊人网综合视频| 精品国产乱码久久久久久天美 | 欧美日韩一区二区电影| 人妻视频一区二区三区| 欧美激情手机在线视频| 北条麻妃一区二区三区在线| 国产九区一区在线| 狠狠爱www人成狠狠爱综合网| 午夜免费一级片| 一区二区三区四区乱视频| av av片在线看| 久久午夜a级毛片| 日韩黄色av| www.成年人视频| 久久精品水蜜桃av综合天堂| 在线免费黄色av| 国产亚洲美女久久| 国产精品麻豆| 免费高清一区二区三区| 91免费版在线看| 欧美性生给视频| 8x福利精品第一导航| wwww亚洲| 91精品久久久久久| 婷婷亚洲五月| 色综合久久五月| 欧美午夜精品在线| 人操人视频在线观看| 国产精品久久久久av免费| 日韩精品永久网址| 色哟哟网站在线观看| 五月激情丁香一区二区三区| 国产一级片在线| 成人激情综合网| 黄色精品一区| 亚洲最大成人综合网| 亚洲国产视频直播| 少妇一级淫片免费看| 国产欧美日韩视频| 欧美三级在线| 永久免费毛片在线观看| 制服丝袜亚洲色图| 自拍一区在线观看| www.18av.com|