精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久国产精品毛片| 日韩欧美一级| 一区精品在线播放| 99久久精品无码一区二区毛片| 特级片在线观看| 欧美激情极品| 欧美日韩国产综合一区二区三区| 久久国产精品免费观看| 五月天福利视频| 美女视频网站久久| 欧美黑人巨大xxx极品| 日韩精品卡通动漫网站| 国产欧美日韩电影| 色综合久久久久综合| 丰满女人性猛交| 人操人视频在线观看| 久久福利视频一区二区| 2018日韩中文字幕| 午夜精品福利在线视频| 窝窝社区一区二区| 日韩一区二区在线观看视频播放| 亚洲乱码中文字幕久久孕妇黑人| 黄网站视频在线观看| 26uuu国产日韩综合| 91精品视频观看| 国产字幕在线观看| 在线播放精品| 美女视频久久黄| 九九九视频在线观看| 另类ts人妖一区二区三区| 欧美日韩你懂得| 欧美女人性生活视频| 在线播放蜜桃麻豆| 国产精品久久久久影院| 日本不卡二区| 天堂资源中文在线| 成人免费va视频| 亚洲影院污污.| 在线黄色av网站| 视频精品一区二区| 55夜色66夜色国产精品视频| 国产一级淫片免费| 欧美 日韩 国产一区二区在线视频 | 精品一区中文字幕| 国产精品极品美女在线观看免费| 欧美一二三区视频| 精品69视频一区二区三区Q| 久久在线精品视频| 日本裸体美女视频| 色无极亚洲影院| 亚洲三级免费看| 日韩人妻一区二区三区| 欧美a级网站| 亚洲精品狠狠操| 中文在线观看免费视频| 国产成人福利av| 日韩欧美成人一区二区| 日批视频在线看| 久久在线观看| 日韩欧美一二区| 香蕉视频1024| 荡女精品导航| 精品爽片免费看久久| 国产国语性生话播放| 天堂av一区二区三区在线播放| 亚洲第一视频网站| 青青草成人免费视频| 免费成人网www| 亚洲免费电影一区| 性の欲びの女javhd| 日韩欧美一区二区三区在线视频| 深夜精品寂寞黄网站在线观看| 国产欧美小视频| 久久视频国产| 欧美精品在线免费播放| 久久免费精彩视频| 制服诱惑一区二区| 国产精品老女人视频| 一级黄色免费片| 国产成人亚洲精品狼色在线| 国产在线一区二| 国产精品视区| 欧美精品在线观看播放| 北条麻妃在线一区| 日本成人伦理电影| 51精品视频一区二区三区| 网站在线你懂的| 欧美成人精品午夜一区二区| 日本最新一区二区三区视频观看| 最新国产精品亚洲| 日韩精品xxx| 亚洲成人五区| 日韩av在线免费看| 人人妻人人澡人人爽| 日韩免费特黄一二三区| 久久久999精品视频| 久久久久无码精品国产| 天堂在线一区二区| 亚洲xxxx做受欧美| 久久精品a一级国产免视看成人| 国产午夜精品福利| mm131午夜| 天天综合av| 欧美一区二区三区啪啪| 黄色工厂在线观看| 欧美成免费一区二区视频| 久久久久久久久久久久av| 青青草视频在线观看免费| 国产精品白丝jk黑袜喷水| 久久伊人一区二区| 成人video亚洲精品| 色悠久久久久综合欧美99| 国产探花一区二区三区| 日韩理论片av| 57pao成人永久免费视频| 国产精品伦一区二区三区| 91污在线观看| 国产xxxx振车| 爱情电影网av一区二区| 亚洲丝袜av一区| 久久综合色综合| 理论电影国产精品| 青青草原成人| 国产精品蜜芽在线观看| 欧美一区二区三区四区在线观看 | www.88av| 欧美96在线丨欧| 国产精品午夜国产小视频| 欧美偷拍视频| 午夜欧美一区二区三区在线播放| 91免费视频污| 99精品全国免费观看视频软件| 欧美亚洲另类激情另类| 欧美一级特黄aaaaaa| 亚洲精品免费在线观看| 中日韩av在线播放| 成人系列视频| 国产精品久久久久久久久粉嫩av| 女人偷人在线视频| 精品久久久久久久中文字幕| 国产男女无遮挡猛进猛出| 91超碰成人| 成人免费激情视频| 欧美激情午夜| 欧美日本在线播放| 后入内射无码人妻一区| 欧美aaa在线| 亚洲欧洲久久| 91国产精品| 精品少妇v888av| 亚洲精品成av人片天堂无码| 亚洲午夜精品网| 水蜜桃av无码| 在线综合亚洲| 日产精品久久久一区二区| 免费电影日韩网站| 一本色道久久综合亚洲精品小说 | 色a资源在线| 精品少妇一区二区三区视频免付费 | 亚洲天堂777| 国产精品久久免费看| 日本黄色的视频| 午夜国产一区二区| 91久久久一线二线三线品牌| 国产精品186在线观看在线播放| 亚洲福利精品在线| 午夜婷婷在线观看| 亚洲国产精品成人综合 | 无码人妻丰满熟妇区五十路| 国产日韩影视精品| 午夜激情影院在线观看| 欧美日韩三级电影在线| 久久大片网站| abab456成人免费网址| 日韩亚洲国产中文字幕| 亚洲黄色小说网址| 色综合色狠狠天天综合色| www.99re6| 成人免费看黄yyy456| 成年人黄色片视频| 亚洲高清资源在线观看| 国产在线一区二区三区四区| 日本一区二区电影| 欧美精品videosex极品1| 五月婷婷开心中文字幕| 欧美日韩久久一区二区| 久久久久无码国产精品不卡| 久久久三级国产网站| 亚洲日本黄色片| 一本色道久久综合亚洲精品不卡 | youjizz亚洲女人| 国产乱码字幕精品高清av| 国产主播自拍av| 日韩精品一区二区三区免费观看| 国产福利久久| 国产一区二区主播在线| 欧美极品少妇全裸体| 成人在线免费视频| 亚洲成年网站在线观看| 伊人精品一区二区三区| 岛国视频午夜一区免费在线观看| 欧美美女性生活视频| 91日韩精品一区| 日本女人黄色片| 日本欧美在线看| 你懂的av在线| 黄色一区二区三区四区| 亚洲欧洲一区二区福利| 色综合久久中文| 99久久伊人精品影院| 九七电影院97理论片久久tvb| 68精品国产免费久久久久久婷婷| 免费在线观看av| 亚洲一区二区福利| 天天操天天操天天| 日韩欧美aaaaaa| 国产精品久久久久久久久毛片 | 国产免费拔擦拔擦8x在线播放| www.亚洲成人| 成人全视频高清免费观看| 日韩www在线| 高清乱码毛片入口| 制服.丝袜.亚洲.中文.综合| 懂色av中文字幕| 欧美日韩中文字幕| 日韩 欧美 精品| 亚洲国产成人av| 九九热国产在线| 亚洲人妖av一区二区| 91视频免费看片| 国产亚洲污的网站| 国产激情在线免费观看| 91麻豆国产香蕉久久精品| 在线xxxxx| 成人一级片网址| 99久久久无码国产精品性波多| 国产一区福利在线| 亚洲三级在线视频| 国产成人精品1024| 国产人妖在线观看| 国产91精品一区二区| 亚洲欧美激情一区二区三区| 午夜视频福利在线| 亚洲国产精品激情在线观看| 人妻熟女aⅴ一区二区三区汇编| 成人毛片在线观看| 中文字幕在线视频播放| 99热精品一区二区| 香港三级日本三级| 93久久精品日日躁夜夜躁欧美| 美女搡bbb又爽又猛又黄www| 国产不卡在线一区| 黄色国产在线视频| 97se狠狠狠综合亚洲狠狠| 国产三级国产精品| 国产亚洲精品bt天堂精选| 性欧美精品男男| 国产精品毛片a∨一区二区三区| 亚欧精品视频一区二区三区| 国产精品久久久久久久久晋中| 免费成人美女女在线观看| 成人免费一区二区三区视频| 黄色一级片中国| 亚洲成人av福利| yjizz国产| 欧美日韩国产美| 999av视频| 日韩精品视频在线免费观看| 国模吧精品人体gogo| 最新日韩中文字幕| 欧美草逼视频| 欧美在线观看一区二区三区| 亚洲日本在线观看视频| 91在线观看欧美日韩| 国产精品黄网站| 日韩亚洲一区在线播放| 91精品亚洲| 一区二区传媒有限公司| 日韩高清一级片| 中文字幕 欧美 日韩| 91麻豆精东视频| 人人澡人人澡人人看| 亚洲成人精品一区| 亚洲视频在线观看免费视频| 欧美成人国产一区二区| 国产黄色免费在线观看| 九九热在线精品视频| 亚洲精品动漫| 亚洲精品欧美日韩专区| 性人久久久久| 中文字幕一区二区三区四区五区六区 | 国产免费内射又粗又爽密桃视频| 亚洲影音一区| 欧美视频国产视频| 久久在线观看免费| 成人做爰视频网站| 欧美性黄网官网| 99视频免费看| 亚洲人av在线影院| 女子免费在线观看视频www| 国产精品久久久久久av下载红粉| 色婷婷综合久久久久中文字幕| 亚洲一区二区成人| 国产精欧美一区二区三区白种人| 99精品国产视频| 国产黄色片在线免费观看| 欧美在线短视频| 天天摸夜夜添狠狠添婷婷| 久久手机精品视频| 精品国模一区二区三区| 国产一区二区三区奇米久涩| 午夜免费一区| 国产一区二区在线免费播放| 91影院在线观看| 久久久久久久久久一区二区三区| 欧美午夜理伦三级在线观看| 瑟瑟在线观看| 久久人人爽人人爽人人片av高清| 五月天色综合| 亚洲精品国产精品国自产观看| 先锋影音久久| 免费不卡的av| 亚洲综合色噜噜狠狠| 国产麻豆免费视频| 中文字幕亚洲无线码a| 欧美人体一区二区三区| 精品一区二区三区视频日产| 在线欧美日韩| 香蕉视频免费网站| 亚洲一区在线观看免费 | 亚洲一区二区三区涩| 久久青草久久| 日本一区二区三区网站| 精品久久久久人成| 天堂在线视频观看| 久久乐国产精品| 精品按摩偷拍| 男女私大尺度视频| av电影一区二区| 91香蕉在线视频| 日韩av在线一区| 中文日产幕无线码一区二区| 蜜桃视频成人| 丝袜亚洲精品中文字幕一区| www在线观看免费视频| 在线视频欧美区| 在线观看免费网站黄| 国产伦精品一区二区三区精品视频| 国产欧美日韩在线观看视频| 丁香婷婷激情网| 国产精品国产自产拍高清av| 91av久久久| 欧美成人免费视频| www.久久东京| 大肉大捧一进一出好爽视频| 国产午夜一区二区三区| 国产精品午夜一区二区| www.欧美免费| 久久天堂久久| 国产毛片视频网站| 久久久午夜精品| 一区二区三区日| 久久人人爽人人爽人人片av高清| 青草久久视频| 一区二区三区入口| 亚洲精品中文在线观看| 日韩一级中文字幕| 国产成人精品优优av| 欧美激情偷拍自拍| 亚洲图片欧美另类| 国产成人一二片| 91精品久久久久久久久久| 综合国产在线| 噜噜噜在线视频| 欧美日韩高清一区二区三区| www视频在线看| 久久99热只有频精品91密拍| 免费成人美女在线观看| 欧美成人aaa片一区国产精品| 亚洲国产精品美女| 色成人免费网站| 国产精品无码电影在线观看| www精品美女久久久tv| 国产一区二区在线不卡| 午夜精品视频网站| 日韩一区二区在线免费| 中文字幕在线国产| 91福利在线看| 欧美1234区| 亚洲欧美日韩精品久久久| 国产91色综合久久免费分享| 国产一级片免费在线观看| 久热精品在线视频| 自拍视频一区| 三大队在线观看| 欧美亚洲动漫精品| gogo高清在线播放免费| 一区二区三区在线视频看| 久久你懂得1024| 亚洲精品成人区在线观看|