Задать вопрос
@bybyby

Почему не работает расширение встроенных объектов?

В консоле браузера работает, а через файл не работает. Экземпляр класс MyCoolArray не имеет свои члены, а только прототипа Array...
class MyCoolArray extends Array {
	first() { return this[0] };
	last() { return this[this.length - 1] };
}

var a = new MyCoolArray( 1, 2, 3 );
a.first();


Блин, бабель ломает всю красоту. Может кто-нибудь из матерых знает, как его подстроить?
var MyCoolArray = function (_Array2) {
	_inherits(MyCoolArray, _Array2);

	function MyCoolArray() {
		_classCallCheck(this, MyCoolArray);

		return _possibleConstructorReturn(this, (MyCoolArray.__proto__ || Object.getPrototypeOf(MyCoolArray)).apply(this, arguments));
	}

	_createClass(MyCoolArray, [{
		key: 'first',
		value: function first() {
			return this[0];
		}
	}, {
		key: 'last',
		value: function last() {
			return this[this.length - 1];
		}
	}]);

	return MyCoolArray;
}(Array);

var a = new MyCoolArray(1, 2, 3);

(3) [1, 2, 3]
  0: 1
  1: 2
  2: 3
  length: 3
   __proto__: Array(0)
      concat: ƒ concat()
      ...
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@qq1
Судя по всему babel не умеет расширять встроенные классы:
https://babeljs.io/docs/en/caveats/#classes
Built-in classes such as Date, Array, DOM etc cannot be properly subclassed due to limitations in ES5 (for the es2015-classes plugin). You can try to use babel-plugin-transform-builtin-extend based on Object.setPrototypeOf and Reflect.construct, but it also has some limitations.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы