@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
@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.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы