Есть такой небольшой кусочек кода:
if (Rect.__instances__) {
Rect.__instances__.push(this);
} else {
Rect.__instances__ = [];
Rect.__instances__ = [].push(this);
}
Суть: если у класса есть свойство __instances__, то пихаем в него this. Если нет, то сначала инициализируем __instances__ пустым массивом, а после этого пихаем в него this.
Нужно записать это условие в одну строку вида:
Rect.__instances__ ? Rect.__instances__.push(this) : Rect.__instances__ = [].push(this);
Но этот код вместо того, чтобы вернуть массив со значением this внутри, просто возвращает единицу.
Тогда я попробовал сделать так:
Rect.__instances__ ? Rect.__instances__.push(this) : Rect.__instances__ = (() => {return []}).push(this);
На что мне выдало ошибку вида:
Uncaught TypeError: (intermediate value).push is not a function
Пробовал еще и так:
Rect.__instances__ ? Rect.__instances__.push(this) : Rect.__instances__ = (() => {new Array()}).push(this);
Ошибка та же.
Теперь прошу помощи здесь. Кстати, если кто-то понял, что делает этот код и для того, что я пишу есть решение получше, вроде методов стандартной библиотеки, то такой подход тоже сгодится :)
P.S. Я добавил к вопросу тег lambda, потому что здесь, вроде как именно про это речь и идет. Дело в том, что лямбды в JavaScript'е я гуглил, и в ответ мне выдавало только инфу, связанную со стрелочными ф-ми. Поэтому рискнул предположить, что, поскольку дело тут, скорее всего, именно в стрелочной функции, то и тег "лямбда" сюда подходит.
Выбирай. Вроде последний вариант хороший.
if (Rect.__instances__) {
Rect.__instances__.push(this);
} else {
Rect.__instances__ = [this];
}
Rect.__instances__ ? Rect.__instances__.push(this) : (Rect.__instances__ = [this]);
if (!Rect.__instances__) {
Rect.__instances__ = [];
}
Rect.__instances__.push(this);
(Rect.__instances__ = Rect.__instances__ || []).push(this);
(Rect.__instances__ = []).push(this);
или
Rect.__instances__ = [this];
а push возвращает новую длину массива, поэтому Вы и наблюдали единицу в первоначальном варианте кода.
var Rect={};
if (Rect.__instances__) {
Rect.__instances__.push("1111");
} else {
Rect.__instances__ = new Array("1111");
}
console.log(Rect)
Продвижение своими сайтами как стратегия роста и независимости