#javascript
#javascript
Вопрос:
class Group {
constructor() {
this.members = [];
}
add(value) {
if (!this.has(value)) {
this.members.push(value);
}
}
delete(value) {
this.members = this.members.filter(v => v !== value);
}
has(value) {
return this.members.includes(value);
}
static from(collection) {
let group = new Group;
for (let value of collection) {
group.add(value);
}
return group;
}
}
let group = Group.from([10, 20]);
console.log(group.has(10));
// → true
console.log(group.has(30));
// → false
group.add(10);
group.delete(10);
console.log(group.has(10));
Во-первых, я не понимаю, как этот код с class создает новый экземпляр класса Group без использования оператора new
Во-вторых, у меня также есть проблема с тем, как работает метод from
Комментарии:
1. » Я не понимаю, как этот код с class создает новый экземпляр класса Group без использования оператора new «, который он вызывает
Group.from
, который сам вызываетlet group = new Group;
Ответ №1:
Это почти идентично Set
class , set — это список не повторяющихся значений вместе.
В математике множество — это четко определенная коллекция отдельных объектов, рассматриваемых как самостоятельный объект.
Просто означает, что не может быть повторяющихся значений*
let set = new Set([1, 2, 3, 3])
// Set(3) {1, 2, 3}
set.add(3)
// Set(3) {1, 2, 3}
set.add(4)
// Set(4) {1, 2, 3, 4}
* однако значения, к которым обращаются по ссылке (например, массивы или объекты), будут приводить к дублированию значений, поскольку ссылки сравниваются не по значению, а по адресу в ОЗУ
let set = new Set([[1], [1]])
// Set(2) {[1], [1]}
Следовательно, те же ссылки будут отфильтрованы
let ref = [1]
new Set(ref, ref)
// Set(1) {1}
Ответ №2:
Ключевое слово static определяет статический метод или свойство для класса. Ни статические методы, ни статические свойства не могут быть вызваны для экземпляров класса. Вместо этого они вызываются в самом классе. Статические методы часто являются служебными функциями, такими как функции для создания или клонирования объектов, тогда как статические свойства полезны для кэшей, фиксированной конфигурации или любых других данных, которые вам не нужно реплицировать между экземплярами.
Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static
Выделение добавлено мной.
Нет необходимости вызывать конструктор класса, чтобы иметь возможность вызывать статический метод. Статический метод from создает новый экземпляр с помощью ключевого слова new (которое, в свою очередь, вызывает конструктор, который инициализирует новый экземпляр с соответствующим свойством members ).