久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Javascript的繼承與多態

瀏覽:30日期:2023-11-13 16:01:15

本文先對es6發布之前javascript各種繼承實現方式進行深入的分析比較,然后再介紹es6中對類繼承的支持以及優缺點討論。最后介紹了javascript面向對象編程中很少被涉及的“多態”,并提供了“運算符重載”的思路。本文假設你已經知道或了解了js中原型、原型鏈的概念。

es6之前,javascript本質上不能算是一門面向對象的編程語言,因為它對于封裝、繼承、多態這些面向對象語言的特點并沒有在語言層面上提供原生的支持。但是,它引入了原型(prototype)的概念,可以讓我們以另一種方式模仿類,并通過原型鏈的方式實現了父類子類之間共享屬性的繼承以及身份確認機制。其實,面向對象的概念本質上來講不是指某種語言特性,而是一種設計思想。如果你深諳面向對象的編程思想,即使用c這種面向過程的語言也能寫出面向對象的代碼(典型的代表就是windows NT 內核實現),而javascript亦是如此!正是由于javascript本身對面向對象編程沒有一個語言上的支持標準,所以才有了五花八門、令人眼花繚亂的“類繼承”的代碼。所幸,es6增加了class、extends、static等關鍵字用以在語言層面支持面向對象,但是,還是有些保守!我們先列舉出es6之前常見的幾種繼承方案,然后再來一探es6的類繼承機制,最后再討論下javascript多態。

ES6之前的繼承 原型賦值方式

簡而言之,就是直接將父類的一個實例賦給子類的原型。如下示例:

function Person(name){ this.name=name; this.className='person' }Person.prototype.getClassName=function(){ console.log(this.className)}function Man(){}Man.prototype=new Person();//1//Man.prototype=new Person('Davin');//2var man=new Man;>man.getClassName()>'person'>man instanceof Person>true

如代碼中1處所示,這種方法是直接new 了一個父類的實例,然后賦給子類的原型。這樣也就相當于直接將父類原型中的方法屬性以及掛在this上的各種方法屬性全賦給了子類的原型,簡單粗暴!我們再來看看man,它是Man的一個實例,因為man本身沒有getClassName方法,那么就會去原型鏈上去找,找到的是person的getClassName。這種繼承方式下,所有的子類實例會共享一個父類對象的實例,這種方案最大問題就是 子類無法通過父類創建私有屬性 。比如每一個Person都有一個名字,我們在初始化每個Man的時候要指定一個不同名字,然后子類將這個名字傳遞給父類,對于每個man來說,保存在相應person中的name應該是不同的,但是這種方式根本做不到。所以,這種繼承方式,實戰中基本不用!

調用構造函數方式

function Person(name){ this.name=name; this.className='person' }Person.prototype.getName=function(){ console.log(this.name)}function Man(name){ Person.apply(this,arguments)}var man1=new Man('Davin');var man2=new Man('Jack');>man1.name>'Davin'>man2.name>'Jack'>man1.getName() //1 報錯>man1 instanceof Person>true

這里在子類的在構造函數里用子類實例的this去調用父類的構造函數,從而達到繼承父類屬性的效果。這樣一來,每new一個子類的實例,構造函數執行完后,都會有自己的一份資源(name)。但是這種辦法只能繼承父類構造函數中聲明的實例屬性,并沒有繼承父類原型的屬性和方法,所以就找不到getName方法,所以1處會報錯。為了同時繼承父類原型,從而誕生了組合繼承的方式:

組合繼承

function Person(name){ this.name=name||'default name'; //1 this.className='person' }Person.prototype.getName=function(){ console.log(this.name)}function Man(name){ Person.apply(this,arguments)}//繼承原型Man.prototype = new Person();var man1=new Man('Davin');> man1.name>'Davin'> man1.getName()>'Davin'

這個例子很簡單,這樣不僅會繼承構造函數中的屬性,也會復制父類原型鏈中的屬性。但是,有個問題, Man.prototype = new Person(); 這句執行后,Man的原型如下:

> Man.prototype> {name: 'default name', className: 'person'}

也就是說Man的原型中已經有了一個name屬性,而之后創建man1時傳給構造的函數的name則是通過this重新定義了一個name屬性,相當于只是覆蓋掉了原型的name屬性(原型中的name依然還在),這樣很不優雅。

分離組合繼承

這是目前es5中主流的繼承方式,有些人起了一個吊炸天的名字“寄生組合繼承”。首先說明一下,兩者是一回事。分離組合繼承的名字是我起的,一來感覺不裝逼會好點,二來,更確切。綜上所述,其實我們可以將繼承分為兩步:構造函數屬性繼承和建立子類和父類原型的鏈接。所謂的分離就是分兩步走;組合是指同時繼承子類構造函數和原型中的屬性。

function Person(name){ this.name=name; //1 this.className='person' }Person.prototype.getName=function(){ console.log(this.name)}function Man(name){ Person.apply(this,arguments)}//注意此處Man.prototype = Object.create(Person.prototype);var man1=new Man('Davin');> man1.name>'Davin'> man1.getName()>'Davin'

這里用到了 Object.creat(obj) 方法,該方法會對傳入的obj對象進行淺拷貝。和上面組合繼承的主要區別就是:將父類的 原型 復制給了子類原型。這種做法很清晰:

構造函數中繼承父類屬性/方法,并初始化父類。 子類原型和父類原型建立聯系。

還有一個問題,就是constructor屬性,我們來看一下:

> Person.prototype.constructor< Person(name){ this.name=name; //1 this.className='person' }> Man.prototype.constructor< Person(name){ this.name=name; //1 this.className='person' }

constructor是類的構造函數,我們發現,Person和Man實例的constructor指向都是Person,當然,這并不會改變instanceof的結果,但是對于需要用到construcor的場景,就會有問題。所以一般我們會加上這么一句:

Man.prototype.constructor = Man

綜合來看,es5下,這種方式是首選,也是實際上最流行的。

行文至此,es5下的主要繼承方式就介紹完了,在介紹es6繼承之前,我們再往深的看,下面是獨家干貨,我們來看一下Neat.js中的一段簡化源碼(關于Neat.js,這里是傳送門Neat.js官網,待會再安利):

//下面為Neat源碼的簡化-------------------------function Neat(){ Array.call(this)}Neat.prototype=Object.create(Array.prototype)Neat.prototype.constructor=Neat-------------------------//測試代碼var neat=new Neat;>neat.push(1,2,3,4)>neat.length //1>neat[4]=5>neat.length//2>neat.concat([6,7,8])//3

現在提問,上面分割線包起來的代碼塊干了件什么事?

對,就是定義了一個繼承自數組的Neat對象!下面再來看一下下面的測試代碼,先猜猜1、2、3處執行的結果分別是什么?期望的結果應該是:

451,2,3,4,5,6,7,8

而實際上卻是:

44[[1,2,3,4],6,7,8]

吶尼!這不科學啊 !why ?

我曾在阮一峰的一篇文章中看到的解釋如下:

因為子類無法獲得原生構造函數的內部屬性,通過 Array.apply() 或者分配給原型對象都不行。原生構造函數會忽略 apply 方法傳入的 this ,也就是說,原生構造函數的 this 無法綁定,導致拿不到內部屬性。ES5是先新建子類的實例對象 this ,再將父類的屬性添加到子類上,由于父類的內部屬性無法獲取,導致無法繼承原生的構造函數。比如,Array構造函數有一個內部屬性 [[DefineOwnProperty]] ,用來定義新屬性時,更新 length 屬性,這個內部屬性無法在子類獲取,導致子類的 length 屬性行為不正常。

然而,事實并非如此!確切來說,并不是原生構造函數會忽略掉 apply 方法傳入的this而導致屬性無法綁定。要不然1處也不會輸出4了。還有,neat依然可以正常調用push等方法,但繼承之后原型上的方法有些也是有問題的,如neat.concat。其實可以看出,我們通過 Array.call(this) 也是有用的,比如length屬性可用。但是,為什么會出問?根據癥狀,可以肯定的是最終的this肯定有問題,但具體是什么問題呢?難道是我們漏了什么地方導致有遺漏的屬性沒有正常初始化?或者就是瀏覽器初始化數組的過程比較特殊,和自定義對象不一樣?首先我們看第一種可能,唯一漏掉的可能就是數組的靜態方法(上面的所有繼承方式都不會繼承父類靜態方法)。我們可以測試一下:

for(var i in Array){ console.log(i,'xx')}

然而并沒有一行輸出,也就是說Array并沒有靜態方法。當然,這種方法只可以遍歷可枚舉的屬性,如果存在不可枚舉的屬性呢?其實即使有,在瀏覽器看來也應該是數組私有的,瀏覽器不希望你去操作!所以第一種情況pass。那么只可能是第二種情況了,而事實,直到es6出來后,才找到了答案:

ES6允許繼承原生構造函數定義子類,因為ES6是先新建父類的實例對象this,然后再用子類的構造函數修飾this,使得父類的 所有行為 都可以繼承。

請注意我加粗的文字。“所有”,這個詞很微妙,不是“沒有”,那么言外之意就是說es5是部分了。根據我之前的測試(在es5下),下標操作和concat在chrome下是有問題的,而大多數函數都是正常的,當然,不同瀏覽器可能不一樣,這應該也是jQuery每次操作后的結果集以一個新的擴展后的數組的形式返回而不是本身繼承數組(然后再直接返回this的)的主要原因,畢竟jQuery要兼容各種瀏覽器。而Neat.js面臨的問題并沒有這么復雜,只需把有坑的地方繞過去就行。言歸正傳,在es5中,像數組一樣的,瀏覽器不讓我們愉快與之玩耍的對象還有:

Boolean()Number()String()Array()Date()Function()RegExp()Error()Object() es6的繼承方式

es6引入了class、extends、super、static(部分為ES2016標準)

class Person{ //static sCount=0 //1 constructor(name){ this.name=name; this.sCount++; } //實例方法 //2 getName(){ console.log(this.name) } static sTest(){ console.log('static method test') }}class Man extends Person{ constructor(name){ super(name)//3 this.sex='male' }}var man=new Man('Davin')man.getName()//man.sTest()Man.sTest()//4輸出結果:Davinstatic method test

ES6明確規定,Class內部只有靜態方法,沒有靜態屬性,所以1處是有問題的,ES7有一個靜態屬性的 提案 ,目前Babel轉碼器支持。熟悉java的可能對上面的代碼感覺很親切,幾乎是自解釋的。我們大概解釋一下,按照代碼中標號對應:

constructor為構造函數,一個類有一個,相當于es5中構造函數標準化,負責一些初始化工作,如果沒有定義,js vm會定義一個空的默認的構造函數。 實例方法,es6中可以不加'function'關鍵字, class內定義的所有函數都會置于該類的原型當中 ,所以,class本身只是一個語法糖。 構造函數中通過super()調用父類構造函數,如果有super方法,需要時構造函數中第一個執行的語句,this關鍵字在調用super之后才可用。 靜態方法,在類定義的外部只能通過類名調用,內部可以通過this調用,并且靜態函數是會被繼承的。如示例中:sTest是在Person中定義的靜函數,可以通過 Man.sTest() 直接調用。 es6和es5繼承的區別

大多數瀏覽器的ES5實現之中,每一個對象都有 __proto__ 屬性,指向對應的構造函數的prototype屬性。Class作為構造函數的語法糖,同時有prototype屬性和 __proto__ 屬性,因此同時存在兩條繼承鏈。

(1)子類的 __proto__ 屬性,表示構造函數的繼承,總是指向父類。

(2)子類 prototype 屬性的 __proto__ 屬性,表示方法的繼承,總是指向父類的 prototype 屬性。

class A {}class B extends A {}B.__proto__ === A // trueB.prototype.__proto__ === A.prototype // true

上面代碼中,子類 B 的 __proto__ 屬性指向父類 A ,子類 B 的 prototype 屬性的 __proto__ 屬性指向父類 A 的 prototype 屬性。

這樣的結果是因為,類的繼承是按照下面的模式實現的:

class A {}class B {}// B的實例繼承A的實例Object.setPrototypeOf(B.prototype, A.prototype);// B繼承A的靜態屬性Object.setPrototypeOf(B, A);

Object.setPrototypeOf的簡單實現如下:

Object.setPrototypeOf = function (obj, proto) { obj.__proto__ = proto; return obj;}

因此,就得到了上面的結果。

Object.setPrototypeOf(B.prototype, A.prototype);// 等同于B.prototype.__proto__ = A.prototype;Object.setPrototypeOf(B, A);// 等同于B.__proto__ = A;

這兩條繼承鏈,可以這樣理解:作為一個對象,子類( B )的原型( __proto__ 屬性)是父類( A );作為一個構造函數,子類( B )的原型( prototype 屬性)是父類的實例。

Object.create(A.prototype);// 等同于B.prototype.__proto__ = A.prototype; es6繼承的不足 不支持靜態屬性(除函數)。 class中不能定義私有變量和函數。class中定義的所有函數都會被放倒原型當中,都會被子類繼承,而屬性都會作為實例屬性掛到this上。如果子類想定義一個私有的方法或定義一個private 變量,便不能直接在class花括號內定義,這真的很不方便!

總結一下,和es5相比,es6在語言層面上提供了面向對象的部分支持,雖然大多數時候只是一個語法糖,但使用起來更方便,語意化更強、更直觀,同時也給javascript繼承提供一個標準的方式。還有很重要的一點就是-es6支持原生對象繼承。

更多es6類繼承資料請移步:MDN Classess 。

多態

多態(Polymorphism)按字面的意思就是“多種狀態”。在面向對象語言中,接口的多種不同的實現方式即為多態。這是標準定義,在c++中實現多態的方式有虛函數、抽象類、模板,在java中更粗暴,所有函數都是“虛”的,子類都可以重寫,當然java中沒有虛函數的概念,我們暫且把相同簽名的、子類和父類可以有不同實現的函數稱之為虛函數,虛函數和模版(java中的范型)是支持多態的主要方式,因為javascript中沒有模版,所以下面我們只討論虛函數,下面先看一個例子:

function Person(name,age){ this.name=name this.age=age}Person.prototype.toString=function(){ return 'I am a Person, my name is '+ this.name}function Man(name,age){ Person.apply(this,arguments)}Man.prototype = Object.create(Person.prototype);Man.prototype.toString=function(){ return 'I am a Man, my name is'+this.name;}var person=new Person('Neo',19)var man1=new Man('Davin',18)var man2=new Man('Jack',19)> person+''> 'I am a Person, my name is Neo'> man1+''> 'I am a Man, my name isDavin'> man1<man2 //期望比較年齡大小 1> false

上面例子中,我們分別在子類和父類實現了toString方法,其實,在js中上述代碼原理很簡單,對于同名函數,子類會覆父類的,這種特性其實就是虛函數,只不過js中不區分參數個數,也不區分參數類型,只看函數名稱,如果名稱相同就會覆蓋。現在我們來看注釋1,我們期望直接用比較運算符比較兩個man的大小(按年齡),怎么實現?在c++中有運算符重載,但java和js中都沒有,所幸的是,js可以用一種變通的方法來實現:

function Person(name,age){ this.name=name this.age=age}Person.prototype.valueOf=function(){ return this.age}function Man(name,age){ Person.apply(this,arguments)}Man.prototype = Object.create(Person.prototype);var person=new Person('Neo',19)var man1=new Man('Davin',18)var man2=new Man('Jack',19)var man3=new Man('Joe',19)>man1<19//1>true>person==19//2>true>man1<man2//3>true>man2==man3 //4 注意>true>person==man2//5>false

其中1、2、3、5在所有js vm下結果都是確定的。但是4并不一定!javascript規定,對于比較運算符,如果一個值是對象,另一個值是數字時,會先嘗試調用valueOf,如果valueOf未指定,就會調用toString;如果是字符串時,則先嘗試調用toString,如果沒指定,則嘗試valueOf,如果兩者都沒指定,將拋出一個類型錯誤異常。如果比較的兩個值都是對象時,則比較的時對象的引用地址,所以若是對象,只有自身===自身,其它情況都是false。現在我們回過頭來看看示例代碼,前三個都是標準的行為。而第四點取決于瀏覽器的實現,如果嚴格按照標準,這應該算是chrome的一個bug ,但是,我們的代碼使用時雙等號,并非嚴格相等判斷,所以瀏覽器的相等規則也會放寬。值得一提的是5,雖然person和man2 age都是19,但是結果卻是false。 總結一下,chrome對相同類的實例比較策略是先會嘗試轉化,然后再比較大小,而對非同類實例的比較,則會直接返回false,不會做任何轉化。 所以我的建議是:如果數字和類實例比較,永遠是安全的,可以放心玩,如果是同類實例之間,可以進行 非等 比較,這個結果是可以保證的,不要進行相等比較,結果是不能保證的,一般相等比較,變通的做法是:

var equal= !(ob1<ob2||ob1>ob2) //不小于也不大于,就是等于,前提是比較操作符兩邊的對象要實現valueOf或toString

當然類似toString、valueOf的還有toJson方法,但它和重載沒有什么關系,故不冗述。

數學運算符

讓對象支持數學運算符本質上和讓對象支持比較運算符原理類似,底層也都是通過valueOf、toString來轉化實現。 但是通過這種覆蓋原始方法模擬的運算符重載有個比較大局限就是:返回值只能是數字!而c++中的運算符重載的結果可以是一個對象 。試想一下,如果我們現在要實現一個復數類的加法,復數包括實部與虛部,加法要同時應用到兩個部分,而相加的結果(返回值)仍然是一個復數對象,這種情況下,javascript也就無能為力了。

總結

本文系統的介紹了javascript類繼承和多態。如要轉載請注明作者和原文鏈接。最后向大家安利一下我的開源項目:Neat.js ,歡迎star。如文中有誤,歡迎斧正。

參考資料

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf http://es6.ruanyifeng.com/#docs/class

來自:https://juejin.im/post/5912753ba22b9d005817524e

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 狠狠操天天干 | 午夜剧院官方 | a级性生活| 亚洲精选久久久 | 黑人巨大精品欧美一区二区三区 | 日韩视频一区二区三区 | 91尤物网站网红尤物福利 | 中文精品久久久 | 免费成人高清在线视频 | 正在播放国产精品 | 亚洲国产成人在线 | 日韩中文在线 | 在线免费黄色 | 日韩在线视频中文字幕 | 亚洲一区二区三区免费在线 | 欧美一区二区久久 | 人操人人 | 国产精品久久久久久久久久 | 日本一区二区成人 | 1区2区视频 | 毛片国产 | 黑人巨大精品欧美一区二区三区 | 91久久极品 | 91精品久久久久久久久久小网站 | av黄色在线 | 国产精品久久国产精品 | 一本一道久久a久久精品综合蜜臀 | 在线色网站 | 成人av免费看 | 色婷婷av一区二区三区软件 | 亚洲视频在线看 | 精品无人乱码一区二区三区的优势 | 国产中文字幕在线 | 超碰在线人 | 天天操天天插天天干 | 久久久久久国产 | 一区二区三区在线视频播放 | 精品无码三级在线观看视频 | 日韩av免费在线播放 | 亚洲高清视频网站 | av影片在线 | 国产精品女教师av久久 | 日韩成人一区二区 | 亚洲黄页 | 日韩精品免费在线视频 | 国产精品久久久久国产a级 91福利网站在线观看 | www久久久久久久 | 国产日韩一区二区三区 | 秋霞av电影 | 亚洲欧美日韩精品久久奇米色影视 | 一级黄色生活视频 | 亚洲高清在线观看 | 国产日本欧美在线 | 最新中文字幕在线 | 99视频精品 | 人人干人人干人人 | 精品视频| 中文字幕亚洲一区二区va在线 | 精品视频一区二区三区 | 久久福利电影 | 精品免费国产一区二区三区 | 欧美 日韩 | 久久兔费看a级 | 成人国产精品一级毛片视频 | 成人亚洲网 | av三级在线免费观看 | 久久久久国产一区 | 精品久久久久久 | 成人日韩av | 久久亚洲一区 | 欧美日韩综合 | 国产日产精品一区二区三区四区 | 久久夜夜 | 国产高清视频一区二区 | 91大神在线看 | 日本一区二区三区四区 | 国产综合精品 | 中文字幕99 | 亚洲a精品| 91中文字幕在线 | 在线国产区 | 黄色一级视频 | 亚洲日韩欧美一区二区在线 | 黄色毛片观看 | 女同videos另类| 欧美一级黄色片网站 | 一区二区日韩精品 | 国产精品视频一区二区三区不卡 | 激情欧美一区 | 欧美日韩一二三区 | 亚洲高清视频在线 | 91社影院在线观看 | 国产一区二区三区免费观看 | 欧美日韩在线播放 | 就操成人网| 日韩欧美中文在线 | 中文字幕日韩欧美 | 久久综合久久久 | 超碰一区二区三区 | 在线观看日韩 | 国产一级视频在线观看 | 久久久精彩视频 | 亚洲欧美精品一区二区 | 亚洲视频在线一区 | 中文字幕69av| 在线a视频 | 国产精品久久久久久久久久免费看 | 国产一区二区观看 | 精品一级| 精品国产一区二区三区不卡蜜臂 | 密色视频 | 精品久久久久久久久久久久久久久久久久久 | 欧美日在线 | 99这里只有精品视频 | 亚洲一区久久久 | h视频在线免费 | 天堂中文资源在线 | 亚洲八区 | 亚洲精品第一区在线观看 | 欧美精品日韩 | 欧美日韩高清 | 成人网久久| 日干夜干天天干 | 日日搞夜夜操 | 日韩国产在线观看 | 亚洲激情第一页 | 日韩av成人 | 91精品国产aⅴ | 狠狠躁夜夜躁人人爽天天高潮 | 国产 高清 在线 | 日韩视频在线观看 | 在线观看91| 99re在线视频 | 男人的天堂久久精品 | 欧美久久久久 | 欧美电影一区 | 欧美一区免费 | 久久久久中文字幕 | 欧美日韩精品电影 | 精品视频在线观看 | 久久2| 黄色一级片免费播放 | 精品亚洲一区二区三区 | 欧美另类亚洲 | 日本久久精品视频 | 最近最新中文字幕 | 精品一区二区三区中文字幕 | 欧美日韩91 | 日韩av高清在线 | 亚洲情视频 | 亚洲精品久久久久久一区二区 | 狠狠的日 | 91免费版在线观看 | 欧美理论在线观看 | 亚洲中午字幕 | 91麻豆精品国产91久久久更新时间 | 91精品国产综合久久久久久丝袜 | 成人免费视频观看视频 | 日本欧美在线观看 | 亚洲精选一区 | 91亚洲国产| 日韩精品一区二区三区中文在线 | aaaaaaa片毛片免费观看 | 国产福利视频 | 亚洲精品免费在线观看 | 精久久久| 欧美黑人xxx | 欧美一区二区三区成人 | 精品国产一区二区三区小蝌蚪 | www伊人 | 欧美一区二区三区在线观看视频 | 天天综合网91 | 91色在线观看 | 国产欧美久久久久久 | 国产区在线 | 日本久久精品视频 | 香蕉大人久久国产成人av | 欧美日韩一区二区三区 | 午夜激情福利视频 | 亚洲电影在线看 | 免费在线观看一级毛片 | 香蕉婷婷 | 欧美成人精品一区二区男人看 | 99热在线播放 | 自拍偷拍第一页 | 日本欧美国产 | 午夜在线电影 | 91视频电影 | 成年人网站免费在线观看 | 91免费在线视频 | 一级篇| 在线看亚洲 | 国产成人av一区 | 北条麻妃一区二区三区在线 | 欧美不卡一区二区 | 特一级毛片 | 国产午夜精品一区二区三区嫩草 | 久久久久国产精品免费免费搜索 | 波多野结衣在线网址 | 日韩一区二区精品 | 免费观看特级毛片 | 国产一区二区三区四区在线观看 | 我要看a级毛片 | 欧美日韩一区二区三区在线观看 | 91精品国产色综合久久 | 第一色综合 | 在线视频国产一区 | 色综久久| 久久精品在线 | 国产一区二区三区在线免费观看 | 亚洲精选久久久 | 国产中文一区二区三区 | 亚洲成人基地 | 91日日| 国产a久久精品一区二区三区 | 日韩综合网 | 人人看人人草 | 亚洲欧洲久久 | 可以看黄的视频 | 国产精选一区二区 | 日韩在线不卡 | 欧美久久一区二区三区 | 日韩视频一区二区三区在线观看 | 欧美精品在线一区二区 | 欧美日韩一区二区视频在线观看 | 一区二区精品在线 | 欧美肉体xxxx肉交高潮 | 国产猛男猛女超爽免费视频网站 | 欧美亚洲一 | 明里在线观看 | a一级免费视频 | 三a毛片| 中文字幕av高清 | 在线精品亚洲欧美日韩国产 | 午夜免费观看网站 | 一级毛片免费高清 | 日韩成人中文字幕 | 日韩欧美视频 | 精品国产一区探花在线观看 | 欧美日韩精品一区二区三区蜜桃 | 国产大毛片 | 国产欧美一区二区 | 四虎av| 中文字幕在线视频观看 | 亚洲一区二区精品在线观看 | 亚洲电影中文字幕 | 一级片手机免费看 | 北条麻妃国产九九九精品小说 | 蜜桃视频一区二区三区 | 国产精品视频免费播放 | 日韩专区中文字幕 | 91香蕉视频在线观看 | 99久久精品国产一区二区三区 | 日韩在线高清视频 | 亚洲欧美影院 | 91免费看片| 亚洲一区在线观看视频 | 国产精品久久国产精麻豆99网站 | 黄色免费一级 | 国产电影一区二区在线观看 | 高清国产一区二区三区四区五区 | 久久在线 | 亚洲电影免费 | 亚洲精品视频播放 | 成人在线观看中文字幕 | 91精品国产综合久久久久久丝袜 | 日本在线视频观看 | 久久久久久亚洲精品 | 欧美三级视频在线播放 | 欧美久久久久久久久久久久久久 | 一区二区三区亚洲视频 | 人人看人人干 | 99在线观看 | 国产午夜精品久久久久久久 | 成人h视频在线观看 | 嫩草影院网站入口 | 日本免费网 | 欧美福利在线观看 | 亚洲 欧美 另类 综合 偷拍 | 天堂中文av在线 | 亚洲视频综合 | 国产一区二区三区四区在线观看 | 日韩在线不卡 | 色com | 在线看片福利 | 国产深夜视频在线观看 | 久久亚洲一区二区 | 特级做a爰片毛片免费看108 | 天天操,夜夜操 | 99精品国产一区二区三区 | 一区二区亚洲视频 | 粉嫩高清一区二区三区精品视频 | 国产精品一码二码三码在线 | 拍拍无遮挡人做人爱视频免费观看 | 成人av教育 | 久久久精品456亚洲影院 | 欧美 亚洲 另类 激情 另类 | 国产精品女同一区二区久久夜 | 在线播放亚洲 | 国产精品美女视频 | 小草av | 中文字幕2021 | 噜噜噜天天躁狠狠躁夜夜精品 | 日韩视频中文字幕在线观看 | 欧美日韩中文 | 亚洲高清视频在线观看 | 久久久久久久久久久久久久av | 黄色一级网站 | 伊人网在线视频免费观看 | 羞羞视频在线播放 | 午夜在线视频免费观看 | 久久久久久久国产精品 | 毛片免费网站 | 日本做暖暖视频高清观看 | 一区二区精品在线 | 高清国产一区二区三区四区五区 | 日韩欧美第一页 | 毛片特级| 老牛嫩草一区二区三区眼镜 | 亚洲成人高清在线 | 日韩视频在线免费观看 | 欧美精品在线观看 | 夜夜爽99久久国产综合精品女不卡 | 日韩免费 | 久久精品一 | 91av在线播放| 福利视频一 | 欧美在线观看网站 | 亚洲一区中文字幕在线 | 日韩av在线一区 | 欧日韩免费 | 国产欧美日韩一区二区三区 | 中文字幕日韩欧美一区二区三区 | 成年人免费看 | 九九色九九| 天天澡天天狠天天天做 | 亚洲人网站 | 亚洲欧美综合精品久久成人 | 波多野结衣一区二区三区高清 | 黄色片在线免费观看 | 国产一级一级片 | 日韩高清在线一区 | 国产高清精品一区二区三区 | 久久美女视频 | 国产精品久久7777 | 亚洲毛片在线 | 国产精品久久久久久吹潮 | 亚洲成av| 欧美精品片 | 91精品在线播放 | 国产九九在线观看 | 国产精品美女久久久久久免费 | 国产乱码精品一区二区三区忘忧草 | 精品久久久久久久久久 | 亚洲国产中文字幕 | 午夜精品视频在线观看 | 欧美日韩在线精品 | 日本精品一区二区三区在线观看 | 99国产精品久久 | 三级特黄特色视频 | 99久久精品国产一区二区三区 | 超碰一区二区三区 | 日韩成人中文字幕 | 成人一区二区在线 | 国产99久久精品一区二区永久免费 | 99这里只有精品视频 | 亚洲乱码国产乱码精品精 | 在线播放亚洲 | 亚洲第一福利视频 | 日韩9999 | 国产欧美精品一区二区三区四区 | 少妇无套高潮一二三区 | 国产亚洲成av人片在线观看桃 | 欧美精产国品一二三区 | 欧美性视频网站 | 在线国产视频 | 久久99精品国产99久久6尤 | 午夜私人影院 | 成人午夜免费视频 | 国产一区二区三区免费 | 久久精品国产免费 | 久久草视频 | 亚洲免费a | av大片网 | 精品不卡 | www.国产精品| 激情毛片 | 日韩精品久久久久 | 久久久久久成人 | 久久伊人青青草 | 欧美精品乱码久久久久久按摩 | 中文字幕视频 | 99精品欧美一区二区三区综合在线 | 一区二区免费视频 | 91亚洲国产成人久久精品网站 | 福利久久久 | 国产精品免费观看 | 好色视频在线观看 | 男女羞羞网站 | 欧美视频亚洲视频 | 97人人爱 | 日韩精品一区二区在线观看 | 日本免费一区二区三区 | 看毛片的网站 | 亚洲精品国精品久久99热 | 国产乱码精品一区二区三区中文 | 日韩中文在线观看 | 五月婷婷色 | 91国自产精品中文字幕亚洲 | 国产精品一区三区 | 日韩毛片免费看 | 欧美日韩国产精品一区二区亚洲 | 久久久久久亚洲国产 | 中文在线一区 | 97伦理电影 | 亚洲中午字幕 | 亚洲精品国产第一综合99久久 | 九九免费精品视频 | 日韩激情欧美 | 亚洲h视频 | 视频一区二区国产 | 伊人网站 | 麻豆自拍偷拍 | 三级黄色片在线免费观看 | 福利视频网站 | 天天影视色香欲 | 日本久久精品一区二区 | 国产精品片aa在线观看 | 伊人短视频 | 日韩精品小视频 | 97在线观看 | 国产精品久久免费视频 | 久久精品99国产精品亚洲最刺激 | 久久国产精品影视 | 仙人掌旅馆在线观看 | 免费成人av在线 | 国产精品久久久久久久久久免费 | 国产xxx护士爽免费看 | 国产电影一区二区三区图片 | 亚洲精品福利网站 | 日本中文一区二区 | 久草久草久草 | 特级毛片在线 | 成人网久久 | 91性高湖久久久久久久久_久久99 | 国产一区二区视频在线观看 | 中文字幕一二区 | 国产精品毛片久久久久久 | 久久久久久国产免费 | 欧美一区二区三区在线观看视频 | 自拍一区视频 | 精品国产高清一区二区三区 | 亚洲第一精品在线 | 自拍一区视频 | 91久久国产综合久久 | 亚洲一二三区在线观看 | 国产免费黄视频 | 亚洲日本乱码一区两区在线观看 | 成人在线免费观看 | 在线观看中文字幕 | 亚洲日本韩国欧美 | 亚洲精品在线视频 | 亚洲第一视频网站 | 日韩视频三区 | 一级片在线观看 | 日韩欧美在线观看视频 | 国产偷录视频叫床高潮对白 | 精品一区久久 | 男女羞羞羞视频午夜视频 | 国产aⅴ一区二区 | 久久久久久久中文 | 亚洲精品在线播放 | 国产高潮呻吟久久渣男片 | 国产视频久久久 | 福利片在线 | 99在线视频精品 | 日韩久久影院 | 久久综合九九 | 91在线 | 亚洲 | 久久成人免费视频 | 欧美一区二区三区精品 | 欧美激情一区 | 精品乱子伦一区二区三区 | 亚洲怡红院在线观看 | 精品无码久久久久久国产 | 国产成人精品一区二区三区四区 | 2018啪一啪| 国产精品极品美女在线观看免费 | 欧美日韩中文字幕在线播放 | 欧美日韩视频第一页 | 玖玖视频在线 | 俺要去97中文字幕 | 99综合| 亚洲欧美一区二区三区在线 | 狠狠撸在线| 国产毛片a级 | 亚洲tv久久爽久久爽 | 欧美精品1 | 久久久www成人免费无遮挡大片 | 日韩视频在线观看一区 | 91成人免费看片 | 日本精品在线播放 | 精品国产乱码久久久久久闺蜜 | 在线一区观看 | 一区二区三区在线免费观看 | 最新中文字幕 | 日韩中文视频 | 成人作爱视频 | 成人看片免费网站 | 久久久久国产一区二区三区四区 | 日韩亚洲| 欧美日韩国产一区二区三区不卡 | 久久久精品国产 | 一区久久| 不卡一区二区三区四区 | 91久久精品 | 欧美日韩在线一区二区三区 | 国产成人免费视频网站高清观看视频 | 91视频免费在线 | 午夜影院网站 | 亚洲 精品 综合 精品 自拍 | 在线色网 | 91极品国产 | 国产一区二区三区免费 | 欧美成人激情视频 | 日韩成人小视频 | 日韩在线小视频 | 97精品久久 | 国产美女一区 | 男人天堂网站 | 91麻豆精品国产91久久久资源速度 | 91人人| 亚洲人成网亚洲欧洲无码 | 在线色网站| 欧美精品一区自拍a毛片在线视频 | 亚洲 国产 另类 精品 专区 | 呦一呦二在线精品视频 | 精品国产鲁一鲁一区二区在线观看 | 日韩一区二区精品 | av在线精品| 成人av影院| 国产精品成人国产乱一区 | 成人在线观看免费视频 | 高清xxxx | 亚洲国产自产 | 久久成人精品 | av一区在线观看 | 国产成人一区 | 国产精品高潮呻吟久久av黑人 | 欧美综合久久 | 日本免费三片免费观看 | 成人免费在线观看视频 | 久久亚洲欧美日韩精品专区 | 日本成人一二三区 | 亚洲视频在线观看网站 | 欧美黑人做爰xxxⅹ 国产精品一区二区视频 | 久久久久久久久国产成人免费 | 国产影音先锋 | 欧美日韩精品久久久 | 天堂久久一区 | 亚洲一区二区三区免费 | avhd101在线成人播放 | 欧美精品免费在线观看 | 1区在线 | 国产精品入口麻豆www | 四虎中文字幕 | 久久成人国产 | 久久精彩| 成年人网站在线免费看 | 欧美日韩视频 | 日韩电影专区 | 四虎新网站 | 亚洲欧美高清 | 久久久久久久久久久久福利 | 99精品视频免费 | 草草视频在线播放 | 色毛片 | av毛片在线免费看 | 日韩精品1区 | 久久69精品久久久久久久电影好 | 亚洲欧洲一区二区 | 狠狠91 | 欧美一级片免费观看 | 一a级毛片| 亚洲三区在线观看 | 欧美精品二区中文乱码字幕高清 | 欧美日本乱大交xxxxx | 日韩欧美在线视频 | 国外成人在线视频网站 | av中文字幕在线 | 免费的黄视频 | 久久精品国产视频 | 国产精品自产拍在线观看 | 国产欧美精品一区二区三区 | 国产精品久久久久久久久久久久久久 | av国产精品毛片一区二区小说 | 青青草精品 | 亚洲一道本| 操操操av| 日韩免费福利视频 | 日本三级在线观看中文字 | 亚洲免费一区 | 免费一区在线 | 粉嫩视频在线观看 | 国产拍揄自揄精品视频麻豆 | 成人午夜性a一级毛片免费看 | 色性av| 蜜臀91精品国产高清在线观看 | 成人小视频在线观看 | 日韩精品一二三区 | 国产成人在线一区二区 | 99国产精品久久久久久久成人热 | 欧美日韩中文字幕在线 | 日韩精品视频免费看 | 欧美日韩三级 |