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

JSDoc:一個可選的 TypeScript 替代品

開發 前端
JSDoc 語法有多種用途,包括為變量聲明類型、指定函數參數和返回值的類型、記錄和提供函數的使用方式、避免拼寫錯誤等。這些特性與 TypeScript 類似,可以被像 VS Code 這類現代代碼編輯器利用,為程序員提供構建、使用或維護代碼的支持。

JavaScript[2] 一直處于近年來最常用的腳本語言之一的地位。它以在 Web 平臺上編寫腳本的便捷性而聞名。隨著語言本身的發展,它從最開始蹭 Java 熱度的“玩具”語言,變成了一種成熟的語言,還能用來構建大的應用了。

不幸的是,隨著深入使用,JavaScript 語言本身的缺陷也被保留出來,包括:

  • 缺乏靜態類型檢查。JavaScript 是一門動態語言,有較為寬松的限制。比如:定義的函數參數在調用時不提供也行。靜態類型語言(例如 Java)就不是這樣了,因為它會在編譯時報錯,但 JavaScript 默認不提供這方面的支持,就導致某些錯誤會滲透到 Javascript 應用程序的生產環境中
  • 在大項目中很難擴展和維護。JavaScript 沒有提供一種強有力的機制來管理大型代碼庫,這使得隨著時間的推移擴展和維護項目變得困難。

TypeScript 出現

2014 年,微軟推出了 Typescript v1.0[3]。這改變了整個 JavaScript 生態系統。

TypeScript[4] 是 JavaScript 語言的超集,它解決了上一節提到的問題以及更多其他問題。這使得它越來越受歡迎。

State of Js survey 2022[5] 展示的 TypeScript 使用率在上升。

圖片圖片

TypeScript 雖然解決了很多問題,但也有缺點。

本文我們將研究 TypeScript 的一個非常好的替代方案——JSDoc,它解決了靜態類型和可擴展問題,同時還消除了 JavaScript 生態系統中 TypeScript 的缺點。

JSDoc 是什么?

JSDoc[6] 是基于 JavaScript 語言注釋功能建立起的一套文檔系統。可以幫助你在編寫 JavaScript 代碼的同時,通過使用包含 JSDoc 語法的注釋獲得文檔支持。

JSDoc 語法有多種用途,包括為變量聲明類型、指定函數參數和返回值的類型、記錄和提供函數的使用方式、避免拼寫錯誤等。這些特性與 TypeScript 類似,可以被像 VS Code 這類現代代碼編輯器利用,為程序員提供構建、使用或維護代碼的支持。

JSDoc vs Typescript

JSDoc 和 TypeScript 都解決了編寫和維護純 JavaScript 代碼的問題。然而,他們使用了不同的策略,各有優缺點。

JSDoc 相對于 Typescript 的優點:

  • 靈活并且代碼兼容:JSDoc 只是被定義的一種特殊的 JavaScript 注釋,這意味著它可以添加到任何 JavaScript 代碼庫中(無論語言版本如何),并且它不像 TypeScript 那樣與編譯器綁定
  • 提供代碼注釋支持:JSDoc 不僅僅可以用于類型檢查。它可用于添加文檔說明、描述函數如何工作,并且基于此生成文檔網站,所有這些都為增強代碼的可維護性和理解提供了價值
  • 無需編譯步驟:這是從 TypeScript 切換到 JSDoc 的最直接的原因之一。TypeScript 需要通過編譯器將代碼編譯成 Javascript,以便瀏覽器可以理解。而 JSDoc 不需要任何編譯步驟,因為它本質上只是“注釋”,這是 Javascript 本身支持的功能。與每次進行更改時使用必要的 Typescript 構建流程相比,這可以簡化并提高開發效率

使用 JSDoc 的缺點

雖然 JSDoc 比 TypeScript 有很多優勢。但現狀是 Typescript 使用率不斷攀升,被大家越來越多地采用,這是有原因的。以下是 Typescript 相對于 JSDoc 的一些優點:

  • 更強的靜態類型支持:TypeScript 為類型提供了強大的模型,并能在編譯時捕獲這些錯誤。但 JSDoc 就不支持,這些錯誤就直接留在當時的代碼中,也沒有手段去要求強制執行修正
  • 類型推斷支持:TypeScript 可以從值推斷類型。這有助于減少顯式類型注釋并讓代碼庫更加簡潔
  • 轉譯支持:TypeScript 可以通過其 polyfill 功能使用 JavaScript 語言的最新功能(甚至是更加早期的提案功能),有效地將這些最新代碼轉換成在低版本瀏覽器中也能運行的版本

如何使用 JSDoc:基礎知識

JSDoc 存在很久了,因此所有現代編輯器中都廣泛支持它,開箱即用,無需任何安裝。

在 .js 文件中添加 JSDoc 至此,就是增加注釋,是通過添加帶有額外星號(*)的注釋來完成的。

// Normal Javascript Comment 1
/* Normal Javascript Comment 2 */ 

/** 
 JSDoc 需要使用 2 個星號
  */

接下來,我們介紹一些基本功能。

添加代碼描述

/** JSDoc 用來服務的語言 */
const language = "JavaScript"

為變量添加類型

/**
 * 本篇文章的作者
 * @type {string}
 */
const writerName = "Elijah"

以上注解表示變量 writerName 是字符串類型。

為對象和數組添加類型

/**
 * @type {Array<string>}
 */
const colours = ['red', 'blue', 'green']

/**
 * @type {Array<number[]>}
 */
const primeNumbers = [1, 2, 3, 5, 7]

以上 2 種方法都是有效的 JSDoc 注解(與 TypeScript 一樣)。

而對象類型則可以通過 @typedef 指令來創建。

/**
 * @typeof {Object} User - A user schema
 * @property {number} id
 * @property {string} username
 * @property {string} email
 * @property {Array<number>} postLikes
 * @property {string[]} friends
 */
/** @type {User} */
const person1 = {
  id: 847,
  username: "Elijah",
  email: "elijah@user.com",
  postLikes: [44, 22, 24, 39],
  friends: ['fede', 'Elijah']
}
/** @type {User} */
const person2 = {
  id: 424,
  username: "Winston",
  email: "winston@user.com",
  postLike: [18, 53, 98],
  friends: ['Favour', 'Jane']
}

為函數添加類型(參數、返回值和預期錯誤類型)

/**
 * Divide two numbers.
 * @param {number} dividend - The number to be divided.
 * @param {number} divisor - The number to divide by.
 * @returns {number} The result of the division.
 */
function divideNumbers(dividend, divisor) {
    return dividend/divisor;
}

@param關鍵字后面跟參數類型定義,還可以使用連字符 - 添加參數描述。

@returns 關鍵字用于定義函數返回類型。這對于大型函數特別有用,因為這類函數一般很難觀察它預期的返回類型。

此外,你可以使用 @throws 指令添加函數可能的拋錯類型。

接下來,改進 divideNumbers 函數,增加除數為零時的拋錯支持。

/**
 * Divide two numbers.
 * @param {number} dividend - The number to be divided.
 * @param {number} divisor - The number to divide by.
 * @returns {number} The result of the division.
 * @throws {ZeroDivisionError} Argument divisor must be non-zero
 */
function divideNumbers(dividend, divisor) {
    if (divisor === 0) {
        throw new DivisionByZeroError('Cannot Divide by zero')
    }
    return dividend/divisor;
}

你可以在 @throws 中同時指定錯誤類型以及錯誤描述。

/**
 * Custom error for division by zero.
 */
class DivisionByZeroError extends Error {
    constructor(message = "Cannot Divide By Zero") {
      super(message);
      this.name = "DivisionByZeroError";
    }
}

由于 JavaScript 本身并不強制你處理錯誤,因此這樣做一定程度上有助于改善代碼協作、便于維護。

為 class 添加類型(描述、構造函數以及方法)

更進一步,你還可以使用 JSDoc 為 class 提供類型支持。

/**
 * A Rectangle Class
 * @class
 * @classdec A four-sided polygon with opposite sides of equal length and four right angles
 */
class Rectangle {
  /**
   * Initializing a Rectangle object.
   * @param {number} length - The length of the rectangle.
   * @param {number} width - The width of the rectangle.
   */
  constructor(length, width) {
    this.length = length;
    this.width = width;
  }

  /**
   * Calculate the area of the Rectangle
   * @returns {number} The area of the rectangle.
   */
  calculateArea() {
    return this.length * this.width;
  }

  /**
   * Calculate the perimeter of the rectangle.
   * @returns {number} The perimeter of the rectangle.
   */
  calculatePerimeter() {
    return 2 * (this.length + this.width);
  }
}

上面是一個簡單的矩形類,提供了  2 種方法分別用來計算其面積和周長。

@class 關鍵字用于表示這個函數需要使用 new 關鍵字調用,@classdec 用于類的描述。為類添加類型時,重要的是進一步添加類型和描述。

  1. 構造函數
  2. 所有屬性和方法

我們使用 @params 關鍵字來提供需要傳遞到構造函數中的參數的類型和描述。類中的方法的類型化方式與函數相同,這在上一節中已介紹過,就不再贅述。

改進通用代碼文檔

除了向代碼添加基本類型之外,JSDoc 還有很多方法可以幫助提高可讀性性。這里有幾個:

  • 添加代碼作者:可以使用 @author 指令添加作者姓名和電子郵件
/**
 * Possible title for this article
 * @type {string} 
 * @author Elijah [elijah@example.com]
 */
const articleTitle =  "Demystifying JSDoc"
  • 用法示例:你還可以添加代碼片段,展示如何使用,這對于復雜的代碼塊特別有用
/** 
 * Sums of the square of two numbers a**2 + b**2
 * @example <caption>How to use the sumSquares function</caption>
 * // returns 13 
 * sumSquares(2, 3)
 * @example
 * // returns 41
 * sumSquares(4, 5)
 * // Typing the function
 * @param {number} a - The first number
 * @param {number} b - The second number
 * @returns {Number} Returns the sum of the squares
 */
const sumSquares = function(a, b){
    return a**2 + b**2
}

我們使用 @example 指令來實現這一點,也可以使用 <caption> 標簽作為標題。

  • 版本控制:你還可以使用 @version 指令指定項目的版本
/** 
 * @version 1.0.0
 * @type {number} 
 */
const meaningOfLife = 42
  • 有用的鏈接:通常,你可能希望向用戶提供一些跳轉鏈接,他們可以獲得有關代碼的更多知識。它可能是 GitHub 倉庫、一篇教程、一篇博客等。為此,需要兩個指令來幫助實現:@link 和 @tutorial
/**
 * How to use the link tags
 * Also see the {@link https://jsdoc.app/tags-inline-link.html official docs} for more information
 * @tutorial getting-started
 */
function myFunction (){
}

@link 指令將“official docs”渲染成指向某個地址的文字鏈接。而 @tutorial 指令則用于將用戶引導至生成文檔上的相關教程鏈接。

  • 創建模塊:可以使用文件頂部的 @module 指令在 JSDoc 中創建模塊,當前文件就成一個模塊了。模塊被分組在生成的文檔網站上的單獨部分中。
// jsdoc.js
/** @module firstDoc */
//The rest of the code goes here

轉換 JSDoc 文件

使用 JSDoc 的最大優點之一是能夠將 JSDoc 文件轉換為生成文檔網站——甚至是 Typescript,這樣他們就可以獲得使用 Typescript 的好處。

從 JSDoc 文件生成文檔網站

如上所述,你可以按照以下步驟生成更具可讀性的 GUI:

  • 安裝 jsdoc
$ npm install -g jsdoc
  • 對目標文件運行 jsdoc
$ jsdoc path/to/file.js
  • 打開生成的網站。jsdoc CLI 會將文檔自定輸出到 out 文件夾,然后在瀏覽器中打開 out/index.html

這是默認 jsdoc 生成的模板的樣子,但你可以設置成不同的模板配置[7]。

從 JSDoc 生成 .d.ts 文件

TypeScript 中的 .d.ts 文件表示聲明文件,你可以使用以下步驟從 JSDoc 代碼生成這些文件:

  • 在項目文件夾中安裝 tsd-jsdoc
$ npm install tsd-jsdoc
  • 生成 .d.ts 文件

對于單個文件。

$jsdoc -t node_modules/tsd-jsdoc/dist -r our/jsdoc/file/path.js

對于多個文件。

$jsdoc -t node_modules/tsd-jsdoc/dist -r file1.js file2.js file3.js ...

對于整個文件夾。

$jsdoc -t node_modules/tsd-jsdoc/dist -r src

它會將文件中的所有類型合并到 單個文件 out/types.d.ts 中。

注意:這假設你已經安裝了上一節中的 jsdoc 。如果沒有,請在運行此步驟之前先安裝它。

結論

至此,我們已經學習了使用 JSDoc 以及從 JSDoc 代碼生成類型和文檔網站的基礎知識。當 Typescript 編譯/構建步驟對生產力產生負面影響時,JSDoc 特別有用。對遺留代碼庫來說 JSDoc 也很有用。

Rich Harris(Svelte 和 SvelteKit 的創建者)也將整個 Svelte 和 SvelteKit 倉庫從 TypeScript 改用 JSDoc[8]。另外,TypeScript 也添加了對許多 JSDoc 聲明的支持(來源[9])。

參考資料

[1]JSDoc: A Solid Alternative To TypeScript: https://blog.openreplay.com/jsdoc--a-solid-alternative-to-typescript

[2]JavaScript: https://en.wikipedia.org/wiki/JavaScript

[3]Typescript v1.0: https://devblogs.microsoft.com/typescript/announcing-typescript-1-0/

[4]TypeScript: https://www.typescriptlang.org/

[5]State of Js survey 2022: https://2022.stateofjs.com/en-US/usage/

[6]JSDoc: https://jsdoc.app/

[7]模板配置: https://jsdoc.app/about-configuring-default-template.html

[8]從 TypeScript 改用 JSDoc: https://github.com/sveltejs/kit/discussions/4429

[9]來源: https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html

責任編輯:武曉燕 來源: 寫代碼的寶哥
相關推薦

2022-06-29 15:40:28

MinecraftMinetest開源

2021-09-04 15:21:39

ZulipSlack開源

2021-11-10 18:40:24

exa命令 ls命令Linux

2021-12-29 18:18:59

開源MedusaShopify

2020-12-01 17:46:24

FossilGit

2021-01-05 08:35:24

GNU nanoVim編輯器

2020-11-25 13:48:04

LazPaintPaint.NET開源

2023-02-06 06:21:53

BookStack開源

2023-03-29 13:13:34

2022-12-03 15:53:46

開源Linux

2020-07-07 09:10:29

VS CodeLinux開源

2022-12-26 07:40:00

Heroku替代品dynos

2021-10-19 09:00:00

KubeMQKubernetes工具

2011-04-12 09:13:51

OpenIndianaSolaris替代品

2022-08-02 10:45:29

AppFlowyNotion開源

2022-04-13 09:26:47

PeergosGoogle開源

2022-03-24 10:54:33

Piwigo開源

2013-11-19 14:36:38

UbuntuDebianPCLinuxOS

2023-01-27 15:38:25

ChatGPT人工智能機器人

2020-12-09 10:28:10

Github開源編程代碼
點贊
收藏

51CTO技術棧公眾號

国产精品日韩精品中文字幕| 日韩影片中文字幕| 成人免费视频视频| 欧美中文字幕在线| 欧美性猛交xxxx乱大交少妇| 欧美日韩黄色| 欧美视频在线观看 亚洲欧| 色姑娘综合网| 日韩一级片免费| 青青草成人在线观看| 欧美精品激情blacked18| 日本成人免费视频| 国产精品久久久久av蜜臀| 欧美色精品天天在线观看视频| 国产激情片在线观看| 黄色大片在线免费观看| 国产精品99久久久久久似苏梦涵 | 制服.丝袜.亚洲.另类.中文 | 奇米一区二区三区av| 欧美精品一二区| 日本爱爱爱视频| 国产精品黄网站| 欧美精品18+| 国产一级片黄色| av成人影院在线| 亚洲激情男女视频| 永久久久久久| 福利在线播放| 26uuu精品一区二区三区四区在线| 成人中文字幕+乱码+中文字幕| 久久国产视频精品| 亚洲精品韩国| 欧美精品久久久久久久| 国产精品视频看看| 成人a'v在线播放| 亚洲欧美国产一本综合首页| 国产chinese中国hdxxxx| 欧美一级做a| 欧美视频一区二| 成熟老妇女视频| 色偷偷偷在线视频播放| 亚洲成人av一区| 人人妻人人澡人人爽欧美一区双 | 欧美视频亚洲图片| 国产精品亲子伦av一区二区三区| 日本高清不卡视频| 免费av网址在线| sese综合| 日本高清视频一区二区| 中文字幕无码不卡免费视频| 成人欧美magnet| 欧美午夜无遮挡| 春日野结衣av| 欧美大胆成人| 91久久精品国产91性色tv| 日本一区二区黄色| 久久精品女人天堂av免费观看| 色系网站成人免费| 无需播放器的av| 亚洲国产天堂| 日韩网站在线看片你懂的| 可以看的av网址| 大伊香蕉精品在线品播放| 亚洲第一区中文字幕| aaaa黄色片| 免费看av成人| 中文字幕久精品免费视频| 少妇高潮惨叫久久久久| 91精品久久久久久久蜜月| 精品中文字幕乱| 日韩av在线播放观看| 国产欧美在线| 国产精品亚洲综合天堂夜夜| 国产在成人精品线拍偷自揄拍| 国产综合一区二区| 国产aⅴ精品一区二区三区黄| 欧美一级片免费| 久久久久久夜精品精品免费| 亚洲精品在线免费| 中国av在线播放| 精品久久久久久久大神国产| 91小视频网站| 97se亚洲| 国产一区二区三区视频免费| 国产人妻精品一区二区三区不卡| 亚洲高清在线| 国产精品极品在线| 国产sm主人调教女m视频| 91小视频在线免费看| 婷婷久久伊人| 免费看电影在线| 日本乱人伦一区| 免费在线观看日韩av| 亚洲免费福利一区| www.亚洲免费视频| 免费在线观看黄网站| 久久精品免费观看| 国内一区二区三区在线视频| av资源种子在线观看| 亚洲激情一二三区| 日本www.色| 国产精品香蕉| 日韩在线激情视频| 国产精品视频123| 国产精品一区一区| 视频一区二区三区在线观看| brazzers在线观看| 欧美精品一卡二卡| 伊人网在线视频观看| 国产真实久久| 成人有码视频在线播放| 国产免费av高清在线| 五月婷婷激情综合| 99精品视频国产| sdde在线播放一区二区| 欧美亚洲另类视频| 亚洲成人黄色片| 自拍偷拍国产亚洲| 亚洲福利精品视频| 嫩草影视亚洲| 8050国产精品久久久久久| 国产精品无码久久久久成人app| 久久久精品国产99久久精品芒果| 分分操这里只有精品| 免费精品一区| 粗暴蹂躏中文一区二区三区| 中文字幕第2页| 久久久99免费| 狠狠爱免费视频| 精品欧美午夜寂寞影院| 欧美大学生性色视频| 91精品国产综合久| 国产精品国产三级国产专播品爱网| 波多野结衣作品集| 国产日产精品一区二区三区四区的观看方式 | 精品国产午夜福利| 国产乱一区二区| 中文字幕一区二区三区最新| av成人在线观看| 亚洲性xxxx| 亚洲精品一区二三区| 成人午夜电影小说| 国产 日韩 欧美在线| 国产极品模特精品一二| 久久久久久久久久久久久久久久久久av| 999久久久久久| 亚洲美腿欧美偷拍| 国产成人av片| 亚洲精品日本| 久久综合九色综合久99| 欧美成人免费电影| 国产一区二区三区高清在线观看| 中文精品久久久久人妻不卡| 国产免费观看久久| 久久精品网站视频| 日韩精品诱惑一区?区三区| 国产精品视频久久久久| 黄色av网站在线播放| 555www色欧美视频| 久久视频免费在线观看| 97国产一区二区| 成人亚洲视频在线观看| 日韩专区精品| 91精品国自产在线观看| gogo久久| 亚洲人成在线观看网站高清| 中文字幕丰满人伦在线| 亚洲天堂a在线| 伊人久久一区二区三区| 新67194成人永久网站| 先锋影音欧美| 999久久精品| 2020久久国产精品| 成年在线观看免费人视频| 欧美久久久一区| 精品一区二区三区人妻| 久久精品亚洲一区二区三区浴池 | 男女啊啊啊视频| 国产欧美日韩三区| 午夜免费福利网站| 999在线观看精品免费不卡网站| 欧美激情一区二区三区在线视频| 国外成人福利视频| 欧美国产日韩精品| 久久久久久青草| 欧美一区二区三区四区久久| 亚洲视频免费播放| 1区2区3区国产精品| 一区二区免费在线观看视频| 免费人成黄页网站在线一区二区| 男人草女人视频| 精品国产一区二区三区久久久樱花 | 在线播放国产精品| 精品久久久中文字幕人妻| 午夜激情一区二区三区| 国产中文字幕久久| 91在线视频网址| 国产一级片中文字幕| 免费中文字幕日韩欧美| 久久视频免费在线| 国产中文精品久高清在线不| 国产91亚洲精品一区二区三区| 欧美日韩精品一区二区三区视频| 久久久久久有精品国产| 午夜在线免费观看视频| 日韩国产高清污视频在线观看| 国产熟女一区二区丰满| 日本黄色一区二区| 国产精品午夜影院| 亚洲激情六月丁香| 中文字幕求饶的少妇| 久久一夜天堂av一区二区三区| a级大片免费看| 美女免费视频一区| 精品一区二区中文字幕| 影音先锋久久资源网| 一级黄色录像免费看| blacked蜜桃精品一区| 鲁鲁狠狠狠7777一区二区| 盗摄牛牛av影视一区二区| 91性高湖久久久久久久久_久久99| 成人性生活av| 57pao国产成人免费| 国产一线二线在线观看| 欧美成人午夜免费视在线看片| av在线电影免费观看| 亚洲欧美日韩精品| 三级视频在线| 日韩成人激情视频| 三级在线观看网站| 亚洲白拍色综合图区| 亚洲精品久久久久久无码色欲四季| 6080国产精品一区二区| 91久久精品无码一区二区| 欧美午夜视频网站| 欧美男人天堂网| 欧美在线啊v一区| 免费在线不卡av| 欧美日韩一区二区三区高清| 日本丰满少妇做爰爽爽| 在线亚洲高清视频| 欧美特级黄色片| 在线视频你懂得一区二区三区| 国产乱国产乱老熟| 欧美性xxxx在线播放| 久久久久久久久久久影院| 欧美日韩日本国产| 久草手机在线视频| 欧洲一区二区av| 亚洲视频中文字幕在线观看| 欧美日韩国产综合久久| 国产一区二区三区中文字幕| 欧美在线观看视频在线| 影音先锋国产资源| 欧美精品免费视频| 国产成人久久精品77777综合| 日韩精品最新网址| 日本xxxx人| 亚洲欧美日韩一区在线| 中国日本在线视频中文字幕| 久久精品91久久香蕉加勒比| a毛片在线看免费观看| 欧美夫妻性生活xx| 漫画在线观看av| 国产成人鲁鲁免费视频a| 巨胸喷奶水www久久久| 成人国产在线视频| 成人精品动漫一区二区三区| 久久婷婷人人澡人人喊人人爽| 国产一区二区精品福利地址| 中文字幕一区二区三区四区五区六区| 欧美国产先锋| 国内外成人激情视频| 美女一区二区三区| 国产成人精品综合久久久久99 | 亚洲一区二区自拍偷拍| 欧美精品福利| 日韩欧美精品在线观看视频| 精品伊人久久久久7777人| 中文字幕在线观看91| 久久久久久久久久久99999| 视频国产一区二区| 亚洲成人免费视频| 在线不卡免费视频| 精品国产三级电影在线观看| 国产高清美女一级毛片久久| 欧美男插女视频| 欧美影视资讯| 国产91精品入口17c| 欧美日一区二区| 欧美乱大交xxxxx潮喷l头像| 另类中文字幕网| 7788色淫网站小说| 日韩毛片视频在线看| 在线观看精品国产| 欧美日本在线一区| 天堂а在线中文在线无限看推荐| 日韩亚洲欧美成人| 日本不卡网站| av噜噜色噜噜久久| 久久看人人摘| 久久久久久久久久福利| 国产成人自拍在线| 久久久久人妻一区精品色| 图片区小说区区亚洲影院| 国产视频在线观看免费| 一本大道亚洲视频| 偷拍自拍在线看| www 成人av com| 91精品国产福利在线观看麻豆| 不卡影院一区二区| 99久久精品一区| 农村黄色一级片| 欧美精品粉嫩高潮一区二区| 巨骚激情综合| 欧美伊久线香蕉线新在线| 97一区二区国产好的精华液| 性生活免费观看视频| 另类欧美日韩国产在线| 无码h肉动漫在线观看| 亚洲图片欧美色图| 精品久久久免费视频| 久久精品国产欧美亚洲人人爽| 欧美va在线观看| 欧美不卡在线一区二区三区| 日韩视频在线一区二区三区| 性活交片大全免费看| 一区二区三区四区av| 国产精品久久婷婷| 日韩三级成人av网| 成人全视频免费观看在线看| 色姑娘综合av| 蜜臀久久99精品久久久久久9 | 日韩久久视频| 国产精品视频分类| 中文字幕免费不卡在线| 无码日韩精品一区二区| 亚洲精品资源美女情侣酒店| 极品av在线| 久久资源av| 久久在线91| av网在线播放| 欧美亚一区二区| 永久av在线| 成人免费xxxxx在线观看| 综合激情在线| 亚洲成人福利视频| 亚洲成人激情综合网| 天堂在线中文网| 国产v综合v亚洲欧美久久| 国产一区二区三区站长工具| a在线观看免费视频| 自拍偷拍欧美激情| 韩国av免费在线观看| 97视频在线观看播放| 日韩高清一级| 中文字幕第80页| 成人欧美一区二区三区白人| 精品国产av一区二区| 高清欧美性猛交xxxx黑人猛交| 韩国女主播一区二区三区| 亚洲欧洲日产国码无码久久99| wwwwww.欧美系列| 中文字幕av在线免费观看| 久久国产视频网站| 精品午夜电影| 午夜视频你懂的| 亚洲精品国久久99热| 天天干视频在线观看| 国产精品毛片a∨一区二区三区|国 | 青娱乐精品视频在线| 乱老熟女一区二区三区| 欧美videofree性高清杂交| 末成年女av片一区二区下载| 欧美日韩一区在线播放 | 91在线高清免费观看| 在线播放不卡| 黄色一级片一级片| 欧美精品一区二区高清在线观看| 欧美精选视频一区二区| 日本在线视频www色| 97久久精品人人做人人爽| 丰满熟女人妻一区二区三| 欧美精品videofree1080p| 欧美日韩高清| 挪威xxxx性hd极品| 欧美日韩一二区| а√天堂中文资源在线bt| 亚洲欧美日韩精品在线| 99视频有精品| 国产乱子伦精品无码码专区| 91av在线视频观看| 久久久国产精品| 色欲av无码一区二区三区| 日韩精品专区在线影院观看| 免费成人美女女| 日本a在线免费观看| 亚洲欧洲www| 你懂的在线视频| 波多野结衣精品久久|