Конструктор ожидает нулевой или один аргумент, который, если предоставлен, должен быть объектом. Если аргумент не предоставлен, по умолчанию используется пустой объект. Затем он проверяет (возможно, пустой) объект на свойства comparator
и initialValues
. Если эти свойства существуют в объекте, они извлекаются в эти имена переменных (comparator
и initialValues
) - в противном случае этим именам переменных присваиваются значения по умолчанию, (a, b) => a - b
для comparator
и []
для initialValues
]. [1 123]
Например,
new PriorityQueue()
приводит к PriorityQueue
с .comparator
из (a, b) => a - b
и initialValues
из []
, тогда как
new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) })
приводит к [ 1116] с .comparator
из (a, b) => a.localeCompare(b)
и initialValues
из []
.
Если в передаваемом аргументе содержатся свойства, отличные от comparator
или initialValues
, они игнорируются.
Написано многословно, без параметров по умолчанию:
class PriorityQueue {
constructor(obj) {
if (obj === undefined) {
obj = {};
}
if (obj.comparator === undefined) {
obj.comparator = (a, b) => a - b;
}
if (!obj.initialValues === undefined) {
obj.initialValues = [];
}
// main constructor body starts here
this.comparator = obj.comparator;
this.data = obj.initialValues;
this.heapify();
}
Необходимо избегать ключей символа (такой как * и <), так как они имеют тенденцию перемещаться на международных клавиатурах. Посмотрите Википедию: Раскладка клавиатуры
Если Вы планируете передвижение букв в зависимости от локализации, необходимо позволить пользователю выбрать, если он хочет английские варианты вместо этого. Печально, если я должен изучить два набора ярлыков в зависимости от языка. (То же идет для межплатформенных приложений.)
Лучше всего были бы полностью настраиваемые сочетания клавиш, но это могло быть больше для продвинутых пользователей. Посмотрите Классика Media Player для примера.
При поиске большего количества информации я нашел превосходное сообщение в блоге по этой точной теме.
Подводить итог:
- Если возможный ярлык не изменяется
- Если ключ не доступен на определенном расположении, мы должны попытаться использовать то же физическое положение
- Не должно быть никакой ссылки между языком приложения и раскладками клавиатуры
- Это - ошибка полагать, что язык приложения будет соответствовать раскладке клавиатуры. Я дам Вам просто пример: в Румынии более чем 95% компьютеров используют американскую раскладку клавиатуры, и другие 5% используют одну из 4-5 различных румынских раскладок клавиатуры.
- Некоторые люди используют несколько раскладок клавиатуры - обычно они - продвинутые пользователи, и мы не можем проигнорировать их, раскладки клавиатуры могут быть переключены в любое время
- Символы безопасны использоваться, только если они латинские