Показать сообщение отдельно
  #20 (permalink)  
Старый 06.02.2020, 15:40
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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-элементов.

Последний раз редактировалось Malleys, 06.02.2020 в 15:43.
Ответить с цитированием