Конструктор ожидает нулевой или один аргумент, который, если предоставлен, должен быть объектом. Если аргумент не предоставлен, по умолчанию используется пустой объект. Затем он проверяет (возможно, пустой) объект на наличие свойств comparator
и initialValues
. Если эти свойства существуют в объекте, они извлекаются в эти имена переменных (comparator
и initialValues
) - в противном случае этим именам переменных присваиваются значения по умолчанию, (a, b) => a - b
для comparator
и []
для initialValues
.
Например
new PriorityQueue()
приводит к PriorityQueue
с .comparator
из (a, b) => a - b
и initialValues
из []
, тогда как
new PriorityQueue({ comparator: (a, b) => a.localeCompare(b) })
приводит к PriorityQueue
с .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();
}