Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Как говорится, нет правила без правил; хотя код набирается и передается компилятору для интерпретации и выполнения, до тех пор, пока нет грамматических ошибок и ошибок форматирования, независимо от того, насколько античеловечен набор, нет проблем, но код - это еще одно широкое применение, помимо выполнения Просто прочтите его, просмотрите свой прошлый код, разберитесь в исходном коде других людей и т. Д., Так что существует стилизация кода, которая может улучшить внешний вид, но при этом его легко читать.
Конечно, помимо самого кода, дополнительное чтение может быть связано с комментариями к коду. Сами комментарии не будут компилироваться и выполняться компилятором, и их роль заключается в том, чтобы оставить некоторую информацию, чтобы облегчить лучшее понимание самого кода; поэтому прокомментированные Стандартизация - это тоже вопрос, над которым стоит подумать; и следующий вопрос будет представленJSDoc Это такой инструмент;
Согласно его официальному сайту (https://jsdoc.app/index.html) Введение, JSDoc - это генератор документов API для JavaScript, похожий на Javadoc в Java или phpDocumentor в PHP; добавьте комментарии в указанном формате в исходный код, и инструмент JSDoc автоматически просканирует ваш код и сгенерирует API Веб-сайт документа (сгенерировать связанные файлы веб-страницы в указанном каталоге);
Создание документации по API - это только один аспект. Его основной вклад заключается в стандартизации формата комментариев кода. Возможно, вы не использовали его, но большинство из вас где-то видели в исходном коде формат комментариев, подобный следующему:
/** * Returns the sum of a and b * @param {number} a * @param {number} b * @returns {number} */ function sum(a, b) { return a + b; }
Пользоваться инструментом очень просто, сначала установите его:
npm install -g jsdoc
Во-вторых, предположим, что в doc.js Напишите в файл следующий код:
/** * Returns the sum of a and b * @param {number} a * @param {number} b * @returns {number} */ function sum(a, b) { return a + b; } /** * Return the diff fo a and b * @param {number} a * @param {number} b * @returns {number} */ function diff(a, b) { return a - b; }
Затем выполните следующую команду в текущем каталоге:
jsdoc doc.js
Наконец, файл с именем out Содержимое текущего каталога станет следующим:
├── doc.js └── out ├── index.html ├── doc.js.html ├── global.html ├── fonts │ ├── OpenSans-BoldItalic-webfont.eot │ ├── OpenSans-BoldItalic-webfont.svg │ ├── OpenSans-BoldItalic-webfont.woff │ ├── OpenSans-Bold-webfont.eot │ ├── OpenSans-Bold-webfont.svg │ ├── OpenSans-Bold-webfont.woff │ ├── OpenSans-Italic-webfont.eot │ ├── OpenSans-Italic-webfont.svg │ ├── OpenSans-Italic-webfont.woff │ ├── OpenSans-LightItalic-webfont.eot │ ├── OpenSans-LightItalic-webfont.svg │ ├── OpenSans-LightItalic-webfont.woff │ ├── OpenSans-Light-webfont.eot │ ├── OpenSans-Light-webfont.svg │ ├── OpenSans-Light-webfont.woff │ ├── OpenSans-Regular-webfont.eot │ ├── OpenSans-Regular-webfont.svg │ └── OpenSans-Regular-webfont.woff ├── scripts │ ├── linenumber.js │ └── prettify │ ├── Apache-License-2.0.txt │ ├── lang-css.js │ └── prettify.js └── styles ├── jsdoc-default.css ├── prettify-jsdoc.css └── prettify-tomorrow.css
Посетите это через браузер out Связанные веб-страницы в каталоге будут отображать контент, подобный следующим страницам;
Укажите страницу функции:
Шаблон стиля веб-страницы также можно заменить, просто измените его в соответствии с параметрами командной строки, я не буду рассматривать его здесь, давайте узнаем о формате его комментариев;
Пожалуйста, обратитесь к официальному веб-сайту для полного ознакомления с форматом (https://jsdoc.app/index.html), текущая версия - JSDoc 3. Ниже представлены только несколько часто используемых тегов и приведены примеры; конечно, если сложно написать кучу тегов, многие редакторы (например, VS Code) теперь предоставляют соответствующие загрузки подключаемых модулей непосредственно в подключаемом модуле. Будет много поисковых ключевых слов jsdoc, которые генерируются с подсказками или автоматически распознают текущий код, что очень удобно;
JSDoc использует следующий формат символов комментария для обертывания тегов, которые будут добавлены на уровне блока:
/**
*
*
*/
То есть столбец звездочки выровнен по вертикали. Используйте две звездочки в первой строке и добавьте пробел после каждой звездочки перед записью содержимого, например:
/**
* Оставьте пробел перед описанием
* Или многострочное описание
* @param {number} описание параметра
*/
Встроенный пакет:
/** @function */
Также можно написать@desc, Чтобы описать подробную информацию о текущем объекте аннотации;
/** * @function * @description о введении функции */ function myFn() {} /** * Вы также можете написать введение прямо здесь * @function * @description. Если вы продолжите использовать теги для добавления содержимого сюда, оно перезапишет вводное содержимое в первой строке. */ function myFn() {}
Комментарий записывается в начале файла, чтобы описать соответствующую информацию о текущем файле; например:
/** * @file Это файл для ..., содержит ... функции */ // Тогда тело кода ...
Опишите соответствующую информацию об авторе текущего файла или кода;
/**
* @author Jack <jack@example.com>
*/
Опишите информацию об авторских правах текущего файла
/**
* @copyright Jack 2020
*/
Опишите информацию, относящуюся к текущей лицензии на файл;
/**
* @license MIT
*/
или:
/**
* @license
* Copyright (c) 2015 Example Corporation Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* ...
*/
Опишите номер версии текущего проекта;
/**
* Эта версия исправляет ... проблемы
* @version 1.2.3
*/
Опишите, в какой версии была введена функция;
/** * Обеспечить ... функцию * @since 1.2.1 */ function newFn() {}
Подобно значениям «см. Также» и «см. Подробно», вы также можете использовать его для навигации в другие места.@link Перейти к определенному сетевому адресу;
/** * @see fn2 */ function fn1() {} /** * @see {@link http://example.com|some text} */ function fn2() {}
Опишите, что делать дальше;
/** * @todo add ... функция * @todo fix ... ошибка */ function myFn() {}
против @func, @method То же самое означает описание функции;
/** @function */ var myFn = function() {}
Опишите тип переменной;
/** * Переменная типа объекта * @type {object} */ var val1 = {}; /** * Переменная символьного или числового типа * @type {(string|number)} */ var val2; /** * Тип - числовой или пустой * @type {?number} */ var val3; /** * Тип числовой или не может быть пустым * @type {!number} */ var val4; /** * Массив экземпляров класса MyClass * @type {Array.<MyClass>} */ var arr = new MyClass(); /** * Массив строк * @type {string[]} */ var arr2 = ['a', 'b', 'c']; /** * Объект, содержащий строку и числовой тип * @type {object.<string, number>} */ var obj1 = {a: 'one', b: 2} /** * Укажите конкретные ключи и типы объектов * @type {{a: string, b: number}} */ var obj2 = {a: 'one', b: 2} /** * Укажите конкретные ключи и типы именованных объектов * @type {object} obj3 * @type {string} obj3.a * @type {number} obj3.b */ var obj3 = {a: 'one', b: 2}
против @arg, @argument То же самое означает описание информации о параметрах функции;
/** * За меткой следует тип параметра, затем имя параметра и, наконец, описание параметра. * @param {number} a Напишите здесь описание переменной * @param {string} b- или добавьте дефис для удобства чтения * @param {string} c-Или этот параметр имеет очень длинный, очень длинный * Очень длинное, очень длинное, очень длинное, очень длинное, очень длинное описание, которое может занимать несколько строк */ function myFn(a, b, c) {} /** * Переданный параметр является объектом * @param {object} option - параметр объекта, переданный в * @param {строка} option.name - свойство имени объекта * @param {number} option.age - свойство возраста объекта */ function myFn(option) { var name = option.name; var age = option.age; } /** * Переданный параметр представляет собой массив строк * @param {string []} arr - параметр входящего объекта */ function myFn(arr) { var name = option.name; var age = option.age; } /** * Указывает, что параметр необязательный * @param {number} a-это обязательный параметр * @param {number} [b] - это необязательный параметр. * @param {number =} c-другое представление необязательных параметров */ function myFn(a, b, c) {} /** * Указывает значение по умолчанию необязательного параметра * @param {number} a * @param {number} [b = 3] - значение по умолчанию 3 */ function myFn(a, b) {} /** * Различные представления типов параметров * @param {number} a-type - это число * @param {number | string} b-тип - число или строка * @param {? number} c-тип - число или null (null) * @param {! number} d-тип - это число, а не пусто * @param {*} e-Нет ограничений по типу, это может быть любой тип */ function myFn(a, b, c, d, e) {} /** * Означает функцию с любым количеством параметров * Следующая функция возвращает сумму всех входящих параметров * @param {... number} num - любое количество параметров, но все они имеют числовой тип */ function sum(num) { var len = arguments.length; var result = 0; for (let i = 0; i < len; i++) { result += arguments[i]; } return result; }
Используется для описания типов пользовательских переменных;
/** * Описание нестандартного типа * @typedef {(string|number)} myType */ /** * Описание нестандартного типа * @type {myType} val - использовать произвольный тип */ function myFn(val) {}
Опишите информацию о параметрах указанной функции как функцию обратного вызова;
/** * Это описание функции обратного вызова * @callback myCallback * @param {string} aa - параметры, принимаемые функцией обратного вызова * @param {number} [bb] - еще один необязательный параметр, принимаемый функцией обратного вызова */ /** * Это описание самой функции * @param {string} a * @param {myCallback} функция обратного вызова-обратного вызова */ function myFn(a, callback) {}
Или напишите @return, Информация, описывающая возвращаемое значение функции;
/** * @param {number} a * @returns {number} описание возвращаемого значения */ function myFn(a) { return a + 1; } /** * @param {number} a * @returns {(number | string)} Возвращаемое значение может быть числом или символьным типом. */ function myFn2(a) { if (a > 1) { return 1; } else { return 'no.'; } }
Опишите пример использования указанного кода;
/** * Добавьте образец кода (формат будет выделен) * @param {string} a * @param {string} b * @returns {string} return a concat b. * * @example * console.log(myFn('hello ', 'world!')); * // "hello world!" */ function myFn(a, b) { return a + b; }
Опишите class учебный класс;
/** * Описание категории * @class */ class MyClass {} /** * Или конструктор * @class */ function MyClass() {} var ins = new MyClass();
Опишите пространство имен;
/** * Укажите объект в пространстве имен * @namespace */ var MyNamespace = { /** * Представлен как MyNamespace.fn * @returns {*} */ fn: function() {}, /** * Представлен как MyNamespace.a * @type {number} */ a: 1 } /** * Вручную укажите пространство имен * @namespace MyNamespace */ /** * Функция-член MyNamespace.myFn * @function * @returns {*} * @memberof MyNamespace */ function myFn() {}
Описать член текущего класса;
/** * @class */ function MyClass() { /** @member {string} */ this.name = 'knightyun'; /** * Или виртуальный участник * @member {number} age */ }
Опишите класс, к которому принадлежит член;
/** * @class */ class MyClass { /** * @constructor * @memberof MyClass */ constructor() {} /* * @param {string} val * @returns {*} * @memberof MyClass */ myFn(val) {} }