成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

JavaScript繼承的實(shí)現(xiàn)方法有哪些

JavaScript繼承的實(shí)現(xiàn)方法:1、利用構(gòu)造原型模式;2、使用動(dòng)態(tài)原型,根據(jù)面向?qū)ο蟮脑O(shè)計(jì)原則,類型的所有成員應(yīng)該都被封裝在類結(jié)構(gòu)體內(nèi);3、使用工廠模式;4、使用類繼承,即在子類中調(diào)用父類構(gòu)造函數(shù)。

JavaScript繼承的實(shí)現(xiàn)方法有哪些

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

JavaScript 是以對象為基礎(chǔ),以函數(shù)為模型,以原型為繼承的面向?qū)ο箝_發(fā)模式。本節(jié)將詳細(xì)介紹定義 JavaScript 類型的方法,以及實(shí)現(xiàn)繼承的常用模式。

構(gòu)造原型

直接使用 prototype 原型設(shè)計(jì)類的繼承存在兩個(gè)問題。

由于構(gòu)造函數(shù)事先聲明,而原型屬性在類結(jié)構(gòu)聲明之后才被定義,因此無法通過構(gòu)造函數(shù)向原型動(dòng)態(tài)傳遞參數(shù)。這樣實(shí)例化對象都是一個(gè)模樣,沒有個(gè)性。要改變原型屬性值,則所有實(shí)例都會(huì)受到干擾。

當(dāng)原型屬性的值為引用類型數(shù)據(jù)時(shí),如果在一個(gè)對象實(shí)例中修改該屬性值,將會(huì)影響所有的實(shí)例。

示例1

簡單定義 Book 類型,然后實(shí)例化。

function Book () {};  //聲明構(gòu)造函數(shù) Book.prototype.o = {x : 1, y : 2};  //構(gòu)造函數(shù)的原型屬性o是一個(gè)對象 var book1 = new Book ();  //實(shí)例化對象book1 var book2 = new Book ();  //實(shí)例化對象book2 console.log(book1.o.x);  //返回1 console.log(book2.o.x);  //返回1 book2.o.x = 3;  //修改實(shí)例化對象book2中的屬性x的值 console.log(book1.o.x);  //返回3 console.log(book2.o.x);  //返回3

由于原型屬性 o 為一個(gè)引用型的值,所以所有實(shí)例的屬性 o 的值都是同一個(gè)對象的引用,一旦 o 的值發(fā)生變化,將會(huì)影響所有實(shí)例。

構(gòu)造原型正是為了解決原型模式而誕生的一種混合設(shè)計(jì)模式,它把構(gòu)造函數(shù)模式與原型模式混合使用,從而避免了上述問題的發(fā)生。

實(shí)現(xiàn)方法:對于可能會(huì)相互影響的原型屬性,并且希望動(dòng)態(tài)傳遞參數(shù)的屬性,可以把它們獨(dú)立出來使用構(gòu)造函數(shù)模式進(jìn)行設(shè)計(jì)。對于不需要個(gè)性設(shè)計(jì)、具有共性的方法或?qū)傩裕瑒t可以使用原型模式來設(shè)計(jì)。

示例2

遵循上述設(shè)計(jì)原則,把其中兩個(gè)屬性設(shè)計(jì)為構(gòu)造函數(shù)模式,設(shè)計(jì)方法為原型模式。

function Book (title, pages) {  //構(gòu)造函數(shù)模式設(shè)計(jì)     this.title = title;     this.pages = pages; } Book.prototype.what = function () {  //原型模式設(shè)計(jì)     console.log(this.title + this.pages); }; var book1 = new Book("JavaScript 程序設(shè)計(jì)", 160); var book2 = new Book("C語言程序設(shè)計(jì)", 240); console.log(book1.title); console.log(book2.title);

構(gòu)造原型模式是 ECMAScript 定義類的推薦標(biāo)準(zhǔn)。一般建議使用構(gòu)造函數(shù)模式定義所有屬性,使用原型模式定義所有方法。這樣所有方法都只創(chuàng)建一次,而每個(gè)實(shí)例都能夠根據(jù)需要設(shè)置屬性值。這也是使用最廣的一種設(shè)計(jì)模式。

動(dòng)態(tài)原型

根據(jù)面向?qū)ο蟮脑O(shè)計(jì)原則,類型的所有成員應(yīng)該都被封裝在類結(jié)構(gòu)體內(nèi)。例如:

function Book (title, pages) {  //構(gòu)造函數(shù)模式設(shè)計(jì)     this.title = title;     this.pages = pages;     Book.prototype.what = function () {  //原型模式設(shè)計(jì),位于類的內(nèi)部         console.log(this.title + this.pages);     }; }

但當(dāng)每次實(shí)例化時(shí),類 Book 中包含的原型方法就會(huì)被重復(fù)創(chuàng)建,生成大量的原型方法,浪費(fèi)系統(tǒng)資源。可以使用 if 判斷原型方法是否存在,如果存在就不再創(chuàng)建該方法,否則就創(chuàng)建方法。

function Book (title, pages) {     this.title = title;     this.pages = pages;     if (typeof Book.isLock == "undefined") {  //創(chuàng)建原型方法的鎖,如果不存在則創(chuàng)建         Book.prototype.what = function () {             console.log(this.title + this.pages);         };         Book.isLock = true;  //創(chuàng)建原型方法后,把鎖鎖上,避免重復(fù)創(chuàng)建     } } var book1 = new Book("JavaScript 程序設(shè)計(jì)", 160); var book2 = new Book("C語言程序設(shè)計(jì)", 240); console.log(book1.title); console.log(book2.title);

typeof Book.isLock 表達(dá)式能夠檢測該屬性值的類型,如果返回為 undefined 字符串,則不存在該屬性值,說明沒有創(chuàng)建原型方法,并允許創(chuàng)建原型方法,設(shè)置該屬性的值為 true,這樣就不用重復(fù)創(chuàng)建原型方法。這里使用類名 Book,而沒有使用 this,這是因?yàn)樵褪菍儆陬惐旧淼模皇菍ο髮?shí)例的。

動(dòng)態(tài)原型模式與構(gòu)造原型模式在性能上是等價(jià)的,用戶可以自由選擇,不過構(gòu)造原型模式應(yīng)用比較廣泛。

工廠模式

工廠模式是定義類型的最基本方法,也是 JavaScript 最常用的一種開發(fā)模式。它把對象實(shí)例化簡單封裝在一個(gè)函數(shù)中,然后通過調(diào)用函數(shù),實(shí)現(xiàn)快速、批量生產(chǎn)實(shí)例對象。

示例1

下面示例設(shè)計(jì)一個(gè) Car 類型:包含汽車顏色、驅(qū)動(dòng)輪數(shù)、百公里油耗 3 個(gè)屬性,同時(shí)定義一個(gè)方法,用來顯示汽車顏色。

function Car (color, drive, oil) {  //汽車類     var _car =  new Object();  //臨時(shí)對象         _car.color = color;  //初始化顏色         _car.drive = drive;  //初始化驅(qū)動(dòng)輪數(shù)         _car.oil = oil;  //初始化百公里油耗         _car.showColor = function () {  //方法,提示汽車顏色             console.log(this.color);         };         return _car;  //返回實(shí)例 } var car1 = Car("red", 4, 8); var car2 = Car("blue", 2, 6); car1.showColor();  //輸出“red” car2.showColor();  //輸出“blue”

上面代碼是一個(gè)簡單的工廠模式類型,使用 Car 類可以快速創(chuàng)建多個(gè)汽車實(shí)例,它們的結(jié)構(gòu)相同,但是屬性不同,可以初始化不同的顏色、驅(qū)動(dòng)輪數(shù)和百公里油耗。

示例2

在類型中,方法就是一種行為或操作,它能夠根據(jù)初始化參數(shù)完成特定任務(wù),具有共性。因此,可以考慮把方法置于 Car() 函數(shù)外面,避免每次實(shí)例化時(shí)都要?jiǎng)?chuàng)建一次函數(shù),讓每個(gè)實(shí)例共享同一個(gè)函數(shù)。

function showColor () {  //公共方法,提示汽車顏色     console.log(this.color); }; function Car (color, drive, oil) {  //汽車類     var _car = new Object();  //臨時(shí)對象         _car.color = color;  //初始化顏色         _car.drive = drive;  //初始化驅(qū)動(dòng)輪數(shù)         _car.oil = oil;  //初始化百公里油耗         _car.showColor = showColor;  //引用外部函數(shù)     return _car;  //返回實(shí)例 }

在上面這段重寫的代碼中,在函數(shù) Car() 之前定義了函數(shù) showColor()。在 Car() 內(nèi)部,通過引用外部 showColor() 函數(shù),避免了每次實(shí)例化時(shí)都要?jiǎng)?chuàng)建一個(gè)新的函數(shù)。從功能上講,這樣解決了重復(fù)創(chuàng)建函數(shù)的問題;但是從語義上講,該函數(shù)不太像是對象的方法。

類繼承

類繼承的設(shè)計(jì)方法:在子類中調(diào)用父類構(gòu)造函數(shù)。

在 JavaScript 中實(shí)現(xiàn)類繼承,需要注意以下 3 個(gè)技術(shù)問題。

在子類中,使用 apply 調(diào)用父類,把子類構(gòu)造函數(shù)的參數(shù)傳遞給父類父類構(gòu)造函數(shù)。讓子類繼承父類的私有屬性,即 Parent.apply(this, arguments); 代碼行。

在父類和子類之間建立原型鏈,即 Sub.prototype = new Parent(); 代碼行。通過這種方式保證父類和子類是原型鏈上的上下級關(guān)系,即子類的 prototype 指向父類的一個(gè)實(shí)例。

恢復(fù)子類的原型對象的構(gòu)造函數(shù),即 Sub.prototype.constructor=Sub;語句行。當(dāng)改動(dòng) prototype 原型時(shí),就會(huì)破壞原來的 constructor 指針,所以必須重置 constructor。

示例1

下面示例演示了一個(gè)三重繼承的案例,包括基類、父類和子類,它們逐級繼承。

//基類Base function Base (x) {  //構(gòu)造函數(shù)Base     this.get = function () {  //私有方法,獲取參數(shù)值         return x;     } } Base.prototype.has = function () {  //原型方法,判斷get()方法返回值是否為0     return ! (this.get() == 0); } //父類Parent function Parent () {  //構(gòu)造函數(shù)Parent     var a = [];  //私有數(shù)組a     a = Array.apply(a, arguments);  //把參數(shù)轉(zhuǎn)換為數(shù)組     Base.call(this, a.length);  //調(diào)用Base類,并把參數(shù)數(shù)組長度傳遞給它     this.add = function () {  //私有方法,把參數(shù)數(shù)組補(bǔ)加到數(shù)組a中并返回         return a.push.apply(a, arguments)     }     this.geta = function () {  //私有方法,返回?cái)?shù)組a         return a;     } } Parent.prototype = new Base();  //設(shè)置Parent原型為Base的實(shí)例,建立原型鏈 Parent.prototype.constructor = Parent;  //恢復(fù)Parent類原型對象的構(gòu)造器 Parent.prototype.str = function (){  //原型方法,把數(shù)組轉(zhuǎn)換為字符串并返回     return this.geta().toString(); } //子類Sub function Sub () {  //構(gòu)造函數(shù)     Parent.apply(this, arguments);  //調(diào)用Parent類,并把參數(shù)數(shù)組長度傳遞給它     this.sort = function () {  //私有方法,以字符順序?qū)?shù)組進(jìn)行排序         var a = this.geta();  //獲取數(shù)組的值         a.sort.apply(a, arguments);  //調(diào)用數(shù)組排序方法 sort()對數(shù)組進(jìn)行排序     } } Sub.prototype = new Parent();  //設(shè)置Sub原型為Parent實(shí)例,建立原型鏈 Sub.prototype.constructor = Sub;  //恢復(fù)Sub類原型對象的構(gòu)造器 //父類Parent的實(shí)例繼承類Base的成員 var parent = new Parent (1, 2, 3, 4);  //實(shí)例化Parent類 console.log(parent.get());  //返回4,調(diào)用Base類的方法get() console.log(parent.has());  //返回true,調(diào)用Base類的方法has() //子類Sub的實(shí)例繼承類Parent和類Base的成員 var sub = new Sub (30, 10, 20, 40);  //實(shí)例化Sub類 sub.add(6, 5);  //調(diào)用Parent類方法add(),補(bǔ)加數(shù)組 console.log(sub.geta());  //返回?cái)?shù)組30,10,20,40,6,5 sub.sort();  //排序數(shù)組 console.log(sub.geta());  //返回?cái)?shù)組10,20,30,40,5,6 console.log(sub.get());  //返回4,調(diào)用Base類的方法get() console.log(sub.has());  //返回true,調(diào)用Base類的方法has() console.log(sub.str());  //返回10,20,30,40,5,6

【設(shè)計(jì)思路】

設(shè)計(jì)子類 Sub 繼承父類 Parent,而父類 Parent 又繼承基類 Base。Base、Parent、Sub 三個(gè)類之間的繼承關(guān)系是通過在子類中調(diào)用的構(gòu)造函數(shù)來維護(hù)的。

例如,在 Sub 類中,Parent.apply(this, arguments); 能夠在子類中調(diào)用父類,并把子類的參數(shù)傳遞給父類,從而使子類擁有父類的所有屬性。

同理,在父類中,Base.call(this, a.length); 把父類的參數(shù)長度作為值傳遞給基類,并進(jìn)行調(diào)用,從而實(shí)現(xiàn)父類擁有基類的所有成員。

從繼承關(guān)系上看,父類繼承了基類的私有方法 get(),為了確保能夠繼承基類的原型方法,還需要為它們建立原型鏈,從而實(shí)現(xiàn)原型對象的繼承關(guān)系,方法是添加語句行 Parent.prototype=new Base();。

同理,在子類中添加語句 Sub.prototype=new Parent();,這樣通過原型鏈就可以把基類、父類和子類串連在一起,從而實(shí)現(xiàn)子類能夠繼承父類屬性,還可以繼承基類的屬性。

示例2

下面嘗試把類繼承模式封裝起來,以便規(guī)范代碼應(yīng)用。

function extend (Sub, Sup) {  //類繼承封裝函數(shù)     var F = function () {};  //定義一個(gè)空函數(shù)     F.prototype = Sup.prototype;  //設(shè)置空函數(shù)的原型為父類的原型     Sub.prototype = new F ();  //實(shí)例化空函數(shù),并把父類原型引用傳給給子類     Sub.prototype.constructor = Sub;  //恢復(fù)子類原型的構(gòu)造器為子類自身     Sub.sup = Sup.prototype;  //在子類定義一個(gè)私有屬性存儲(chǔ)父類原型     //檢測父類原型構(gòu)造器是否為自身     if (Sup.prototype.constructor == Object.prototype.constructor) {         Sup.prototype.constructor = Sup;  //類繼承封裝函數(shù)     } }

【操作步驟】

1) 定義一個(gè)封裝函數(shù)。設(shè)計(jì)入口為子類和父類對象,函數(shù)功能是子類能夠繼承父類的所有原型成員,不涉及出口。

function extend (Sub, Sup) {  //類繼承封裝函數(shù)     //其中參數(shù)Sub表示子類,Sup表示父類 }

2) 在函數(shù)體內(nèi),首先定義一個(gè)空函數(shù) F,用來實(shí)現(xiàn)功能中轉(zhuǎn)。設(shè)計(jì)它的原型為父類的原型,然后把空函數(shù)的實(shí)例傳遞給子類的原型,這樣就避免了直接實(shí)例化父類可能帶來的系統(tǒng)負(fù)荷。因?yàn)樵趯?shí)際開發(fā)中,父類的規(guī)模可能會(huì)很大,如果實(shí)例化,會(huì)占用大量內(nèi)存。

3) 恢復(fù)子類原型的構(gòu)造器為子類自己。同時(shí),檢測父類原型構(gòu)造器是否與 Object 的原型構(gòu)造器發(fā)生耦合。如果是,則恢復(fù)它的構(gòu)造器為父類自身。

下面定義兩個(gè)類,嘗試把它們綁定為繼承關(guān)系。

function A (x) {  //構(gòu)造函數(shù)A     this.x = x;  //私有屬性x     this.get = function () {  //私有方法get()         return this.x;     } } A.prototype.add = function () {  //原型方法add()     return this.x + this.x; } A.prototype.mul = function () {  //原型方法mul()     return this.x * this.x; } function B (x) {  //構(gòu)造函數(shù)B     A.call (this.x);  //在函數(shù)體內(nèi)調(diào)用構(gòu)造函數(shù)A,實(shí)現(xiàn)內(nèi)部數(shù)據(jù)綁定 } extend (B, A);  //調(diào)用封裝函數(shù),把A和B的原型捆綁在一起 var f = new B (5);  //實(shí)例化類B console.log(f.get());  //繼承類A的方法get(),返回5 console.log(f.add());  //繼承類A的方法add(),返回10 console.log(f.mul());  //繼承類A的方法mul(),返回25

在函數(shù)類封裝函數(shù)中,有這么一句 Sub.sup=Sup.prototype;,在上面代碼中沒有被利用,那么它有什么作用呢?為了解答這個(gè)問題,先看下面的代碼。

extend (B, A); B.prototype.add = function () {  //為B類定義一個(gè)原型方法     return this.x + "" + this.x; }

上面的代碼是在調(diào)用封裝函數(shù)之后,再為 B 類定義了一個(gè)原型方法,該方法名與基類中原型方法 add() 同名,但是功能不同。如果此時(shí)測試程序,會(huì)發(fā)現(xiàn)子類 B 定義的原型方法 add() 將會(huì)覆蓋父類 A 的原型方法 add()。

console.log(f.add());  //返回字符串55,而不是數(shù)值10

如果在 B 類的原型方法 add() 中調(diào)用父類的原型方法 add(),避免代碼耦合現(xiàn)象發(fā)生。

B.prototype.add = function () {  //定義子類B的原型方法add()     return B.sup.add.call(this);  //在函數(shù)內(nèi)部調(diào)用父類方法add() }

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国内盗摄视频一区二区三区 | 无码中文字幕AV免费放软件| 熟妇人妻久久中文字幕老熟妇| 少妇高潮喷水正在播放| 人妻丰满熟AV无码区HD| 日日噜噜噜夜夜爽爽狠狠| 污污污污污污WWW网站免费| 亚欧洲乱码视频一二三区| 亚洲欧美另类激情综合区蜜芽| 夜夜添夜夜添夜夜摸夜夜摸| 亚洲欧美日韩精品久久亚洲区| 一本久久伊人热热精品中文| 一本到高清视频在线观看丶| 欧美性爱亚洲色图| 蜜桃av秘 无码一区二区三区| 久久亚洲精品综合国产仙踪林 | 色在线 | 国产| 无码人妻精品一区二| 亚洲熟妇在线观看| 99RE6在线视频精品免费| 国产AV熟女一区二区三区| 黑人巨茎大战欧美白妇| 蜜桃av一区二区三区| 欧美性猛交XXXX乱大交3| 无人区码一码二码三码区别在哪里| 亚洲欧洲成人AV电影网| WWW国产精品内射熟女| 成人无码精品一区二区三区| 含着奶头搓揉深深挺进| 毛茸茸的中国女BBW| 无码成A毛片免费| 亚洲VA久久久噜噜噜久久无码| 99精品国产再热久久无毒不卡 | 日日摸夜夜添夜夜添无| 少妇人妻偷人精系列| 亚洲AV无码片区一区二区三区| 99久久人妻无码中文字幕系列| 国产精品成人精品久久久 | 久久综合狠狠综合久久综| 试看20分钟做受| 中文字幕日韩人妻| 国内精品久久久久久久影视麻豆| 久久亚洲精品成人无码| 无码精品人妻 中文字幕| 98精产国品一二三产区区| 韩漫网站在线看免费无删减漫画| 日本久久久久久久久精品| 亚洲精品无码久久毛片| WWW.一本色道88久久爱| 国产一国产二国产三国产四国产五| 人狗大战JAVA代码| 中文在线っと好きだっ最新版 | 国产极品美女高潮无套| 内射猛交XXXXⅩX最新消息| 小奶瓶(产奶)沈姜| 成人片黄网站A毛片免费| 麻豆熟妇人妻XXXXXX| 亚洲精品国产A久久久久久| 亚洲国产精品久久无码中文字蜜桃 | 免费的最近直播比较火的黄台| 亚洲AV永久无码精品| 国产精品成熟老女人视频| 日本熟妇WWW色视频在线播放| 97久久天天综合色天天综合色H| 精品无码一区二区三区在线| 亚洲AV成人综合网伊人| 国产精品爆乳奶水无码视频| 哦┅┅快┅┅用力啊┅┅村妇 | 亚洲AV成人网站在线播放| 国产精品51麻豆CM传媒| 内射口爆少妇麻豆| 2018天天躁夜夜躁狠狠躁| 没带罩子让他吃了一天药会怎样| 中文精品久久久久国产网址| 麻豆极品JK丝袜自慰喷水久久| 在糖心VLOG唐伯虎女主角是谁| 久久久久国色AV免费看| 一进一出一爽又粗又大| 蜜桃AV少妇久久久久久高潮不断 | 亚洲国产精品无码中文字满| 精品亚洲成AV人在线观看| 中文字幕亚洲乱码熟女1区2区| 人人人妻人人澡人人爽| 永久免费不卡在线观看黄网站| 美女裸体无遮拦国产兔费网站| WWW国产精品内射熟女| 少妇做爰免费视频网站| 国产午夜免费啪视频观看视频| 海角国精产品三区二区三区| 无遮挡边摸边吃奶边做视频免费| 精产国品一二三产区9977| JAPANESE精品中国少妇| 少妇又紧又色又爽又刺激视频| 国产片AV国语在线观麻豆| 一本一道色欲综合网中文字幕| 人妻AV中文字幕无码专区| 国产精品岛国久久久久| 亚洲性色AV性色在线观看| 热爆料-热门吃瓜-黑料不打烊| 国产人妖视频一区二区| √天堂资源中文WWW| 无码人妻丰满熟妇啪啪网不卡| 猫咪AV最新永久网址无码| 中文字幕日本乱码仑区在线| 男女啪啪摸下面喷水网站| 成人免费午夜无码视频在线播放| 日韩成人无码一区二区三区| 国产一精品一AV一免费| 岳把腿扒开让我添| 少妇高潮一区二区三区99| 国产三级久久精品三级| 中文字幕AV高清片| 日产乱码一二三区别免费演员表| 国产成人无码区免费网站| 野草乱码一二三四区别在哪| 欧美性极品少妇精品网站| 国产欧美在线观看不卡 | 国产AV一区二区精品凹凸| 色8久久人人97超碰香蕉987| 久久AV秘 一区二区三区蜜桃| 被带到调教室刑床惩罚挠痒痒作文| 亚洲AV日韩综合一区久热| 欧美亚洲色综久久精品国产| 泑女网址WWW呦女| 日本极品白嫩ASSPICS| 久久AV伊人蜜臀一区二区| 成人无码一区二区三区网站| 亚洲中文字幕人成乱码| 无码国产精品一区二区免费16 | 寂寞视频一对一视频APP| 坐公交忘穿内裤被挺进老| 亚洲AV中文无码乱人伦APP| 日本JAPANESE醉酒人妻| 3D动漫精品啪啪一区二区中| 亚洲AV最新在线观看网址下载| 日本三级强乳伦姧| 老司机精品成免费视频| 国外BBOX表演视频| 国产超碰人人模人人爽人人添| 67194熟妇在线观看线路| 亚洲色偷偷综合亚洲AV78| 四虎永久在线精品无码视频| 老熟女媾交系列群| 久久ER99热精品一区二区| 国产免费AV片在线无码免费看| 爸的比老公大两倍儿媳叫什么呢 | 亚洲AV狠狠爱一区二区三区| 熟妇人妻不卡无码一区| 欧美人与禽2O2O性论交| 免费AV永久免费网址| 国产婷婷成人久久Av免费高清| A级毛片毛片免费观的看久| 亚洲AV老熟妇在线观看| 玉蒲团Ⅱ之性战奶水潘金莲小说| 亚洲AV永久无码精品成人| 色8激情欧美成人久久综合电影| 欧美最猛黑人XXXⅩ猛男视频| 免费无遮挡无码永久在线观看视频| 国产精品天干天干综合网| 国产爱豆剧传媒在线观看视频| 啊灬啊灬啊灬快灬高潮少 | 日韩欧美人妻一区二区三区| 人人爽人人澡人人人妻、百度| 欧美天天综合色影久久精品| 欧美美女多人群交视频| 久久夜色撩人精品国产| 免费看的WWW哔哩哔哩| 精品一线二线三线精华液| 精品熟人妻一区二区三区在线 | 久久久噜噜噜久久熟女| 久久精品国产欧美日韩| 国精产品一二三区传媒公司| 精品露脸国产偷人在视频| 国产女人的高潮国语对白| 国产成人综合久久亚洲精品| 国产精品麻豆VA在线播放| 国产三级精品三级在线专区1| 厨房丝袜麻麻被后进怀孕| А√天堂资源在线官网BT| 儿子耕了母亲荒废的田| 俄罗斯1317大但人文艺术| 国产精品亚洲А∨无码播放麻豆| 公交车上掀开麻麻超短裙| 好大的奶好爽浪蹄子| 精品 亚洲 无码 自拍 另类 | 国产精品青青在线麻豆| 国产精品久久久久7777按摩| 精品国产熟女成人AV| 久久99热只有频精品8| 欧美嫩FREEXXXHD| 日本狂喷奶水在线播放212| 少妇高潮流白浆在线观看| 无码国产精品一区二区免费VR| 玩弄丰满少妇XXXXX| 夜夜躁狠狠躁日日躁| 在线日韩日本国产亚洲| 房东老头揉捏吃我奶头影片| 国产精品免费久久久久影院仙踪林| 久久久亚洲熟妇熟女ⅩXXX直播| 人人妻人人爽人人澡欧美一区 |