Сообщение от voraa
|
Прокси даже с Бабилоном не поддерживаются
|
Так всё правильно, это реализуется на уровне движка. Смотрите правее в той же таблице — поддерживается во всех последних браузерах. Не поддерживается в Babel — значит он никак не меняет такой код, что и не нужно поскольку так и так поддерживается во всех браузерах.
Сообщение от voraa
|
Т.е. писать двойной код. Отдельно для старого, отдельно для нового.
|
Нет! Скорей разные сборки — ES2020 и ES3 + может плагины и полифилы и затычки и скрывалки.
Сообщение от voraa
|
даже edge 18 не поддерживает в css rgba(0,0,0,50%).
|
Сообщение от voraa
|
Перетряхивать весь код
|
Stylus или SCSS в помощь
Сообщение от voraa
|
Это не спасает. Что я не делал наследования и с помощью __proto__?
Многое наследуется, но a[i] = x не изменяет length, если i больше.
Такое возможно только при наследовании с классами. Там немного другой механизм.
|
Синтаксис классов — это синтаксический сахар для функции и prototype. Никакого особого механизма нет. Вот, например...
{
class ArrayFiller extends Array {
constructor(count, filler) {
super(count);
this.fill(filler);
}
/* остальные методы */
}
const af = new ArrayFiller(5, "a");
console.log(af.length); // 5
af[10] = "b";
console.log(af.length); // 11
af.length = 1;
console.log(af); // ArrayFiller ["a"]
console.log(af instanceof ArrayFiller); // true
}
равносильно...
{
function ArrayFiller(count, filler) {
var af = new Array(count);
af.__proto__ = ArrayFiller.prototype;
af.fill(filler);
return af;
}
ArrayFiller.prototype = {
__proto__: Array.prototype,
constructor: ArrayFiller
/* остальные методы */
};
var af = new ArrayFiller(5, "a");
console.log(af.length); // 5
af[10] = "b";
console.log(af.length); // 11
af.length = 1;
console.log(af); // ["a"]
console.log(af instanceof ArrayFiller); // true
}
Такой же способ использовался в Chrome DevTools для наследования от HTMLDivElement и пр. HTML-элементов.