Как вернуть значение из объекта, если оно есть?
Есть такой код, который создает точки по порядку. Если их нет. Если есть - нужно просто вернуть ее.
createPoint(): HTMLElement {
const point = document.createElement('div');
if (!this.points.controlPoints.point1) {
return (this.points.controlPoints.point1 = point);
} else {
return this.points.controlPoints.point1;
}
if (!this.points.controlPoints.point2) {
return (this.points.controlPoints.point2 = point);
} else {
return this.points.controlPoints.point2;
}
}
Как видно - дальше первого if - программа не пойдет. Логика такая: если первой точки нет - создать. Если есть - вернуть. Тоже самое для второй. Как можно улучшить этот код?
Пробовал так:
const point = document.createElement('div');
debugger;
if (!this.points.controlPoints.point1) {
return (this.points.controlPoints.point1 = point);
}
if (!this.points.controlPoints.point2) {
return (this.points.controlPoints.point2 = point);
}
if (this.points.controlPoints.point2) {
return this.points.controlPoints.point2;
}
if (this.points.controlPoints.point1) {
return this.points.controlPoints.point1;
}
Это создает первую и вторую точку - и вернеться только вторая.
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
Нужно где-то хранить порядок необходимых точек. Надо бы сделать это где-то вне метода, но можно и в нем. Наверно, что-то типа того:
createPoint() {
const CP = this.points.controlPoints;
if (!CP._saved_point_names) {
CP._saved_point_names = ['point1', 'point2'];
// Единожды создает массив необходимых точек, если его еще нет.
}
/***/
let point_name = CP._saved_point_names.shift();
// Получаем название точки, одновременно удалив её из начала массива.
if (!point_name) throw New Error('Превышено количество предусмотренных вызовов.');
return CP[point_name] || (CP[point_name] = document.createElement('div'));
// Возвращает точку, если она существует, или создает новую и возвращает её же.
}