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

Javascript的New、Apply、Bind、Call知多少

開發(fā) 前端
Javascript中的apply、call、bind方法是前端代碼開發(fā)中相當(dāng)重要的概念,并且與this的指向密切相關(guān)。本篇文章我們將深入探討這個關(guān)鍵詞的作用,并嘗試進(jìn)行手動編寫復(fù)現(xiàn)。

[[438565]]

1 寫在前面

Javascript中的apply、call、bind方法是前端代碼開發(fā)中相當(dāng)重要的概念,并且與this的指向密切相關(guān)。本篇文章我們將深入探討這個關(guān)鍵詞的作用,并嘗試進(jìn)行手動編寫復(fù)現(xiàn)。

閱讀文章前,我們帶著幾個問題進(jìn)行研究:

  • 用什么樣的思路可以new關(guān)鍵字?
  • apply、bind、call這三個方法有什么區(qū)別?
  • 怎樣手動實(shí)現(xiàn)一個apply、bind和call?

2 new關(guān)鍵詞

new關(guān)鍵詞的作用是執(zhí)行一個構(gòu)造函數(shù),返回一個實(shí)例對象,根據(jù)構(gòu)造函數(shù)的情況來確定是否可以接受參數(shù)的傳遞。

2.1 new的原理

使用new進(jìn)行實(shí)例化對象,其步驟是:

  1. 創(chuàng)建一個新的空對象,即{}
  2. 將該對象構(gòu)造函數(shù)的作用域賦給新對象,this指向新對象(即將新對象作為this的上下文)
  3. 執(zhí)行構(gòu)造函數(shù)中的代碼,為這個新對象添加屬性
  4. 如果該對象構(gòu)造函數(shù)沒有返回對象,則返回this
  1. function Person(){ 
  2.  this.name = "yichuan" 
  3.  
  4. const p = new Person(); 
  5. console.log(p.name);//"yichuan" 

我們可以看到當(dāng)使用new進(jìn)行實(shí)例化時,可以將構(gòu)造函數(shù)的this指向新對象p。當(dāng)不使用new時,此時構(gòu)造函數(shù)的this指向window。

  1. function Person(){ 
  2.  this.name = "yichuan" 
  3.  
  4. const p = Person(); 
  5. console.log(p);//undefined 
  6. console.log(name);//"yichuan"   window.name 
  7. console.log(p.name);//"yichuan" is undefined 

當(dāng)我們在構(gòu)造函數(shù)中直接返回一個和this無關(guān)的對象時,使用new關(guān)鍵字進(jìn)行實(shí)例化對象,新生成的對象就是構(gòu)造函數(shù)返回的對象,而非構(gòu)造函數(shù)的this的對象。

  1. function Person(){ 
  2.  this.name = "yichuan"
  3.   return {age:18}; 
  4.  
  5. const p = new Person(); 
  6. console.log(p);//{age:18} 
  7. console.log(p.name);//"undefined" 
  8. console.log(p.age);/18 

此外,當(dāng)構(gòu)造函數(shù)返回的不是一個對象,而是基礎(chǔ)數(shù)據(jù)類型的值時,使用new創(chuàng)建新對象,會將構(gòu)造函數(shù)返回的值以對象形式給新對象。

  1. function Person(){ 
  2.  this.name = "yichuan"
  3.   return "onechuan"
  4.  
  5. const p = new Person(); 
  6. console.log(p);//{name:"yichuan"
  7. console.log(p.name);//"yichuan" 

new關(guān)鍵詞執(zhí)行之后總是會返回一個對象,要么是實(shí)例,要么是return語句指定的對象。

2.2 手寫new的實(shí)現(xiàn)

new被調(diào)用后大致做了哪些事情?

  1. 讓實(shí)例可以訪問私有屬性
  2. 讓實(shí)例可以訪問構(gòu)造函數(shù)原型(constructor.prototype)所在原型鏈上的屬性
  3. 構(gòu)造函數(shù)返回的最后結(jié)果是引用數(shù)據(jù)類型
  1. function new_object(ctor,...args){ 
  2.  //先要判斷ctor是否為一個函數(shù) 
  3.   if(typeof ctor !== "function"){ 
  4.    throw "ctor must be a function"
  5.   } 
  6.   //創(chuàng)建一個空對象 
  7.   const obj = new Object(); 
  8.   //將實(shí)例obj可以訪問到ctor原型所在原型鏈的屬性 
  9.   obj.__proto__ = Object.create(ctor.prototype); 
  10.   //將構(gòu)造函數(shù)的this指向?qū)嵗龑ο髈bj 
  11.   const res = ctor.apply(obj,...args); 
  12.   //確保最后new返回的是一個對象 
  13.   const isObject = typeof res === "object" && typeof res!== null
  14.   const isFunction = typeof res === "function"
  15.   return isObject || isFunction ? res : obj; 

當(dāng)然,我們還可以進(jìn)行優(yōu)化以下:

  1. function new_object() { 
  2.   // 1、獲得構(gòu)造函數(shù),同時刪除 arguments 中第一個參數(shù) 
  3.   const ctor = [].shift.call(arguments);//其實(shí)這里是借用了數(shù)組的shift方法 
  4.   // 2、創(chuàng)建一個空的對象并鏈接到原型,obj 可以訪問構(gòu)造函數(shù)原型中的屬性 
  5.   const obj = Object.create(ctor.prototype); 
  6.   // 3、綁定 this 實(shí)現(xiàn)繼承,obj 可以訪問到構(gòu)造函數(shù)中的屬性 
  7.   const ret =ctor.apply(obj, arguments); 
  8.   // 4、優(yōu)先返回構(gòu)造函數(shù)返回的對象 
  9.   return ret instanceof Object ? ret : obj; 
  10. }; 

3 apply、bind以及call

apply、bind和call是掛載Function對象上的三個方法,調(diào)用這三個方法的必須是一個函數(shù)。

3.1 apply

apply() 方法調(diào)用一個具有給定 this 值的函數(shù),以及作為一個數(shù)組(或類似數(shù)組對象)提供的參數(shù)。apply()方法可以改變函數(shù)this的指向,且立即執(zhí)行函數(shù)。

注意:Chrome 14 以及 Internet Explorer 9 仍然不接受類數(shù)組對象。如果傳入類數(shù)組對象,它們會拋出異常。

  1. func.apply(thisArg, [param1,param2,...]); 

在使用apply時,會將func的this指向改變?yōu)橹赶騮hisArg,然后以[param1,param2,...]參數(shù)數(shù)組作為參數(shù)輸入。

  1. func(["red","green","blue"]); 
  2. func.apply(newFun, ["red","green","blue"]); 

我們可以看到都執(zhí)行func時,第一個func函數(shù)的this指向的是window全局對象,而第二個func函數(shù)的this指向的是newFun。

  1. Function.prototype.apply = function (context, arr) { 
  2.     context = context ? Object(context) : window;  
  3.     context.fn = this; 
  4.    
  5.     let result; 
  6.    //判斷有沒有參數(shù)數(shù)組輸入 
  7.     if (!arr) { 
  8.         result = context.fn(); 
  9.     } else { 
  10.         result = context.fn(...arr); 
  11.     } 
  12.    //此處也可以使用eval進(jìn)行處理 
  13.    // const result = eval("context.fn(...arr)"); 
  14.        
  15.     delete context.fn 
  16.     return result; 

3.2 bind

bind() 方法創(chuàng)建一個新的函數(shù),在 bind() 被調(diào)用時,這個新函數(shù)的 this 被指定為 bind() 的第一個參數(shù),而其余參數(shù)將作為新函數(shù)的參數(shù),供調(diào)用時使用。

  1. bind(thisArg,param1,param2,...); 

其實(shí),bind的實(shí)現(xiàn)思路基本和apply一致,但是在最后實(shí)現(xiàn)返回結(jié)果時,bind不需要直接執(zhí)行,而是以返回函數(shù)的形式返回結(jié)果,之后再通過執(zhí)行這個結(jié)果即可。

先分析下bind的特性:首先是指定新對象this指向,再傳入?yún)?shù)返回一個定義的函數(shù),最后使用柯里化進(jìn)行調(diào)用。同樣的,我們也可以根據(jù)這些特性進(jìn)行手動封裝一個bind函數(shù):

  1. Function.prototype.bind = function(context){ 
  2.  //先要判斷調(diào)用bind函數(shù)的是不是函數(shù),需要拋出異常 
  3.   if(typeof this !== "function"){ 
  4.    throw new Error("this bind function must be userd to function"); 
  5.   } 
  6.   //存儲this的指向 
  7.   const self = this; 
  8.   //context是新對象this指向的目標(biāo)對象,而參數(shù)就是在第一個參數(shù)之后的參數(shù) 
  9.   const args = Array.prototype.slice.call(arguments,1); 
  10.    
  11.   //創(chuàng)建一個空對象 
  12.   const fun = function(){} 
  13.    
  14.   //返回一個函數(shù) 
  15.   const funBind = function(){ 
  16.    //返回所有的參數(shù)給bind函數(shù) 
  17.     const bindArg = Array.prototype.slice.call(arguments); 
  18.     //將傳入的參數(shù)合并成一個新的參數(shù)數(shù)組,作為self.apply()的第二個參數(shù) 
  19.     return self.apply(this instanceof fun ? this : context,  args.concat(bindArgs)); 
  20.     /**********************說明************************************/ 
  21.   } 
  22.    
  23.   //空對象的原型指向綁定函數(shù)的原型 
  24.   fun.prototype = this.prototype; 
  25.   //空對象的實(shí)例賦值給 funBind.prototype 
  26.   funBind.prototype = new fun(); 
  27.   return funBinf; 

補(bǔ)充說明:

  • this instanceof fun返回為true時,表示的是fun是一個構(gòu)造函數(shù),其this指向?qū)嵗苯訉ontext作為參數(shù)輸入
  • this instanceof fun返回為false時,表示的是fun是一個普通函數(shù),其this指向頂級對象window,將綁定函數(shù)的this指向context對象

當(dāng)然,我們也可以寫成這種形式:

  1. Function.prototype.bind = function(context,...args){ 
  2.  //先要判斷調(diào)用bind函數(shù)的是不是函數(shù),需要拋出異常 
  3.   if(typeof this !== "function"){ 
  4.    throw new Error("this bind function must be userd to function"); 
  5.   } 
  6.   //存儲this的指向 
  7.   const self = this; 
  8.    
  9.   const fBind = function(){ 
  10.    self.apply(this instanceof self ? this: context, args.concat(Array.prototype.slice.call(arguments)));  
  11.   } 
  12.   if(this.prototype){ 
  13.    fBind.prototype = Object.create(this.prototype); 
  14.   } 
  15.   return fBind; 

注意:Object.create()是es2015語法引入的新特性,因此在IE<9的瀏覽器是不支持的。

3.3 call

call() 方法使用一個指定的 this 值和單獨(dú)給出的一個或多個參數(shù)來調(diào)用一個函數(shù)。使用調(diào)用者提供的 this 值和參數(shù)調(diào)用該函數(shù)的返回值。若該方法沒有返回值,則返回 undefined。

  1. function.call(thisArg, param1, param2, ...) 

注意:該方法的語法和作用與 apply() 方法類似,只有一個區(qū)別,就是 call() 方法接受的是一個參數(shù)列表,而 apply() 方法接受的是一個包含多個參數(shù)的數(shù)組。

call函數(shù)的實(shí)現(xiàn):

  1. Function.prototype.call = function(context,...args){ 
  2.   //將函數(shù)設(shè)置為對象的屬性 
  3.  context = context || window; 
  4.   context.fn = this; 
  5.    
  6.   //執(zhí)行函數(shù) 
  7.   const result = eval("context.fn(...args)"); 
  8.   //刪除對象的這個屬性 
  9.   delete context.fn; 
  10.   return result; 

4 參考文章

  • 《解析 bind 原理,并手寫 bind 實(shí)現(xiàn)》
  • 《解析 call/apply 原理,并手寫 call/apply 實(shí)現(xiàn)》
  • 《Javascript核心原理精講》

5 寫在最后

在這篇文章中,我們知道apply、bind、call的區(qū)別在于:

  • apply、call改變了this指向后,會立即進(jìn)行調(diào)用函數(shù),返回的是執(zhí)行結(jié)果
  • bind在改變this指向后,返回的是一個函數(shù),需要另外再進(jìn)行調(diào)用一次
  • bind、call傳遞的第一個參數(shù)都是this將要指向的對象,后面都是一個一個參數(shù)的形式輸入
  • apply傳遞的第一個參數(shù)也是this將要指向的對象,后面?zhèn)鬟f的第二個參數(shù)是一個參數(shù)數(shù)組

 

責(zé)任編輯:姜華 來源: 前端萬有引力
相關(guān)推薦

2021-06-18 07:16:17

JavaScript apply()方法call()方法

2024-03-15 08:21:17

bindJavaScrip函數(shù)

2024-08-26 14:35:19

JavaScript關(guān)鍵字對象

2015-03-02 09:22:09

Javascript函數(shù)用法apply

2017-10-10 14:36:07

前端Javascriptapply、call、

2024-08-26 08:36:26

2024-08-20 16:04:27

JavaScript開發(fā)

2021-12-04 11:17:32

Javascript繼承編程

2021-12-10 07:47:30

Javascript異步編程

2011-03-22 09:49:15

JavaScript

2021-06-09 07:01:30

前端CallApply

2021-11-30 06:56:58

CallApply函數(shù)

2021-12-11 18:59:35

JavascriptJSON應(yīng)用

2021-12-03 15:24:45

Javascript數(shù)據(jù)類型

2021-12-07 08:01:33

Javascript 垃圾回收機(jī)制前端

2021-12-06 07:15:48

Javascript作用域閉包

2024-08-06 10:07:15

2012-02-13 22:50:59

集群高可用

2022-05-08 18:02:11

tunnel隧道云原生

2025-04-14 08:50:00

Google ADK人工智能AI
點(diǎn)贊
收藏

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

91精品国产99| 日本韩国欧美一区二区三区| 国产精品久久久久久久久婷婷 | 一本久道久久综合无码中文| 91视频精品| 欧美大片顶级少妇| 精品国产成人av在线免| 免费观看在线午夜影视| 成人高清在线视频| 国产精品日日做人人爱| 欧美日韩偷拍视频| 欧美精品乱码| 精品国产免费人成电影在线观看四季| 激情五月开心婷婷| av免费在线网站| www欧美成人18+| 亚洲在线www| 伦av综合一区| 欧美三级第一页| 中文字幕亚洲一区二区三区五十路| 中文字幕第22页| 三级在线观看视频| 亚洲毛片av在线| 日本精品一区二区三区高清 久久| 国产精品视频久久久久久| 国产亚洲一区在线| 欧美猛少妇色xxxxx| 在线观看国产精品一区| 成人av资源网址| 欧美日韩中字一区| av天堂永久资源网| 成人福利影视| 亚洲主播在线观看| 一区精品在线| 最新电影电视剧在线观看免费观看| 成人h动漫精品一区二区| 91在线观看免费观看 | 男人天堂资源网| 日韩三级视频| 精品久久久久久亚洲综合网| 亚洲第一成肉网| av成人在线观看| 色哟哟欧美精品| 欧美 日韩 激情| 国产91足控脚交在线观看| 亚洲视频一区二区在线| 亚洲日本精品| 999在线视频| 国产亚洲欧洲997久久综合| 精品一区二区视频| 无码国产伦一区二区三区视频 | 91麻豆免费在线视频| 国产精品久久久久久久裸模| 日产精品高清视频免费| 免费福利在线观看| 久久久电影一区二区三区| 久久亚洲高清| 国产中文字幕在线看| 久久久久综合网| 日韩av电影免费在线| 狠狠v欧美ⅴ日韩v亚洲v大胸| 久久久激情视频| 婷婷久久伊人| 日韩毛片久久久| 亚洲视频一区二区在线观看| 久久久精品在线视频| 亚洲七七久久综合桃花剧情介绍| 国产精品久久久久久久久快鸭| 日本在线播放一区| 精华区一区二区三区| 91视频你懂的| 欧美一区二区在线| 粉嫩av一区| 国产精品久久午夜| 99热都是精品| 欧美日韩在线视频免费观看| 亚洲国产美女搞黄色| 五十路熟女丰满大屁股| 男人最爱成人网| 欧美性xxxxxx少妇| 91香蕉视频免费看| www.丝袜精品| 亚洲欧美成人在线| 国产视频123区| 中文字幕av亚洲精品一部二部| 欧美肥老妇视频| 中国一级免费毛片| 三级一区在线视频先锋 | 国产亚洲欧美视频| 三级黄色录像视频| 在线成人黄色| 日本不卡视频在线播放| 福利一区二区三区四区| 久久久久看片| 亚洲r级在线观看| 三级国产在线观看| 1区2区3区精品视频| 777av视频| 日韩精品第二页| 亚洲国语精品自产拍在线观看| 永久免费成人代码| 欧美欧美全黄| 欧美在线视频一区| 国产三级漂亮女教师| 91视频你懂的| 美女av免费观看| 日本另类视频| 精品国产sm最大网站免费看| www色com| 亚洲精品欧美| 亚洲jizzjizz日本少妇| 欧美一级特黄aaaaaa| 97精品久久久久中文字幕 | 99视频免费观看蜜桃视频| 欧美色综合一区二区三区| 亚洲天堂免费在线观看视频| 欧美色图另类小说| 亚洲精品影片| 久久精品亚洲国产| 波多野结衣在线观看视频| 国产不卡在线视频| 在线免费一区| 在线看欧美视频| 日韩av在线天堂网| 免费在线一区二区三区| 久久99精品国产麻豆婷婷洗澡| 久久久久久久久一区| 中文字幕有码在线视频| 欧美日韩成人综合在线一区二区| 波多野结衣办公室33分钟| 欧美日韩影院| 91麻豆蜜桃| 免费在线看a| 欧美三区在线视频| 最近中文字幕在线mv视频在线| 日韩天天综合| 成人精品水蜜桃| 性国产高清在线观看| 欧美精选在线播放| 极品美妇后花庭翘臀娇吟小说| 日韩经典中文字幕一区| 日本高清一区| 深夜视频一区二区| 亚洲最大在线视频| 亚洲精品一区二三区| 久久精品无码一区二区三区| 色综合久久久久无码专区| 精品欠久久久中文字幕加勒比| 久久99青青精品免费观看| 99久久久国产精品无码网爆| 国产精品美日韩| 日本国产一级片| 久久久影院免费| 国产日韩欧美影视| 黄在线免费看| 日韩欧美在线不卡| 成人免费看片98| av电影天堂一区二区在线观看| xxxx18hd亚洲hd捆绑| 另类ts人妖一区二区三区| 国内精品久久久久影院 日本资源| 亚洲欧美另类综合| 精品久久久免费| 爱爱免费小视频| 日韩精彩视频在线观看| 伊人色综合久久天天五月婷| 国产精品日本一区二区三区在线| 欧美国产第一页| 亚欧洲精品视频| 日本电影亚洲天堂一区| 韩国一级黄色录像| 成人国产精品免费观看动漫| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 精品产国自在拍| 成人免费视频网址| 91超碰在线播放| 亚洲图片欧洲图片av| 97超碰资源站| 婷婷综合久久一区二区三区| 亚洲天堂网一区二区| 日本一不卡视频| 最新av网址在线观看| 嫩草国产精品入口| 国产精品视频自在线| 在线看女人毛片| 亚洲免费av网址| 91极品身材尤物theporn| 亚洲综合丁香婷婷六月香| 人妻熟女aⅴ一区二区三区汇编| 免费久久精品视频| 国产成a人亚洲精v品在线观看| 久久最新网址| 97伦理在线四区| 欧美大片免费| 欧美国产日韩中文字幕在线| 九色在线观看| 精品日韩欧美在线| 亚洲大尺度在线观看| 樱桃国产成人精品视频| 免费黄色在线视频| 国产福利不卡视频| 成人一区二区三| 欧美精品国产| 亚洲高清资源综合久久精品| 大型av综合网站| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 黄色软件在线观看| 日韩午夜激情电影| 中文资源在线播放| 欧美日韩国产一区二区三区| 亚洲AV成人无码精电影在线| 91麻豆国产福利在线观看| 一二三级黄色片| 可以看av的网站久久看| 免费网站在线观看视频 | 精品人妻人人做人人爽| 精品福利久久久| 激情伦成人综合小说| 亚洲伦理网站| 国产精品狠色婷| 麻豆成全视频免费观看在线看| 欧美老少做受xxxx高潮| 自拍视频在线| 亚洲午夜精品视频| 视频一区二区三区在线看免费看| 日韩一区二区三区四区五区六区| 中国一级特黄视频| 欧美午夜精品久久久久久浪潮| 免费人成在线观看| 日韩毛片精品高清免费| 久久久精品成人| 国产三级精品视频| 双性尿奴穿贞c带憋尿| 成人免费精品视频| 国产免费无码一区二区| 国产曰批免费观看久久久| 亚洲欧美激情网| 噜噜噜躁狠狠躁狠狠精品视频| www.18av.com| 欧美成人首页| 国产成人三级视频| 亚洲视频电影在线| 伊人狠狠色丁香综合尤物| 青青草成人影院| 亚洲成人一区二区三区| 精品免费视频| 无遮挡亚洲一区| 日韩dvd碟片| 亚洲永久一区二区三区在线| 久久免费精品视频在这里| 亚洲成人一区二区三区| 91麻豆精品国产91久久久平台| 亚洲黄色一区二区三区| 久久国产亚洲精品| 成年人免费观看的视频| 91精品一区国产高清在线gif | 欧美亚洲天堂| 久久男人资源视频| √天堂8资源中文在线| 98精品国产高清在线xxxx天堂| 蜜桃麻豆av在线| 日本亚洲欧美三级| 99久久综合国产精品二区| 国产精品自在线| 国产午夜精品一区在线观看| 91手机在线视频| 欧美91在线| 欧美日韩一区二区三区在线观看免 | 日韩一区二区在线免费观看| 999免费视频| 欧美v国产在线一区二区三区| 午夜精品久久久久久久99老熟妇 | 精品久久香蕉国产线看观看gif| 日韩av男人天堂| 日韩欧美成人区| 一道本在线视频| 欧美大肚乱孕交hd孕妇| 午夜成人鲁丝片午夜精品| 亚洲欧美另类在线观看| av网站在线免费观看| 九九热精品视频| 午夜伦理福利在线| 国产精品久久久久久久美男| 国产一区二区高清在线| 久久99国产精品| 青青草国产免费一区二区下载| 亚洲小视频在线播放| 性感少妇一区| 婷婷激情综合五月天| 不卡大黄网站免费看| 1024手机在线观看你懂的| 曰韩精品一区二区| 亚洲综合久久网| 日韩欧美综合在线| 欧美日韩在线精品一区二区三区激情综| 中文字幕亚洲精品| 91九色在线播放| 国产中文字幕亚洲| 欧美顶级毛片在线播放| 一区二区三区欧美在线| 亚洲免费播放| 日本在线观看视频一区| 久久午夜老司机| 欧美精品成人久久| 欧美揉bbbbb揉bbbbb| 天天干天天操av| 欧美成人sm免费视频| 亚洲天堂一区二区| 国产一区二区在线网站| 亚欧美无遮挡hd高清在线视频| 国产又黄又大又粗视频| 国产成人丝袜美腿| 夫妇露脸对白88av| 欧美视频在线视频| 狠狠躁夜夜躁av无码中文幕| 色一情一乱一区二区| 日韩精品99| 久久久久久久久久久久久9999| 在线中文字幕第一区| 校园春色 亚洲色图| 久久综合一区二区| 免费在线看黄网址| 91精品国产91综合久久蜜臀| 岛国在线视频免费看| 欧美一区二区三区四区在线| 一区中文字幕电影| 日韩精品一区二区三区电影| 日本美女一区二区三区| 国产精品扒开腿做爽爽| 岛国av一区二区三区| 内射无码专区久久亚洲| 久久99精品久久久久久琪琪 | 在线综合亚洲欧美在线视频| jizz日韩| 国产精品久久久久久av福利| 免费毛片在线不卡| 久久无码高潮喷水| 99re66热这里只有精品3直播 | 亚洲欧美va天堂人熟伦 | 韩国视频理论视频久久| 看亚洲a级一级毛片| av磁力番号网| 国产精品羞羞答答xxdd| www欧美com| 欧美一区二区三区白人 | 欧美在线视频免费观看| 西野翔中文久久精品字幕| 日本不卡在线观看视频| 久久久久久97三级| 国产熟妇一区二区三区四区| 亚洲欧美制服丝袜| 久久久人成影片一区二区三区在哪下载| 久久综合一区二区三区| 久久久国产精品一区二区中文| 人妻少妇一区二区| 一本色道久久综合精品竹菊| 久久久久久女乱国产| 国产精品久久久久高潮| 99久久综合狠狠综合久久aⅴ| 极品粉嫩美女露脸啪啪| 亚洲另类在线一区| 成人爽a毛片一区二区| 97在线视频免费播放| 久久成人av| 日本国产一级片| 亚洲午夜av在线| 三级理论午夜在线观看| 国产精品美女av| 在线观看国产精品入口| 老熟女高潮一区二区三区| 精品久久中文字幕久久av| 国产在线视频你懂得| 国产精品自产拍在线观看中文 | 欧美成人精品不卡视频在线观看| 999在线精品| 日韩精品无码一区二区三区免费| 国产精品视频线看| 国产精品综合在线| 97视频免费观看| 成人嫩草影院| 美女日批在线观看| 色综合天天综合网天天看片| 午夜老司机在线观看| 成人免费在线看片| 久久亚洲电影| 一区二区成人免费视频| 国产视频在线一区二区| 99久久99九九99九九九| 免费 成 人 黄 色| 18欧美亚洲精品| 性xxxx视频| 97久久夜色精品国产九色| 日日骚欧美日韩| 欧美成人三级视频| 一区二区三区黄色| 大型av综合网站| 男生操女生视频在线观看 | 欧美激情喷水视频| 国产一区二区三区四区五区传媒| 两女双腿交缠激烈磨豆腐|