Почему не меняется & ldquo; bottom & rdquo; значение div для & ldquo; 0 & rdquo; Работа?

Глядя на скомпилированный код, сгенерированный Babel , я думаю, что вы не можете определить, используется ли функция как класс. В то время JavaScript не имел классов, и каждый конструктор был просто функцией.

Код ES6:

// ES6
class A{}

ES5, сгенерированный Babel :

// ES5
"use strict";

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var A = function A() {
    _classCallCheck(this, A);
};

Конечно, если вы используете соглашения о кодировании, вы можете проанализировать функцию (класс) и проверить, начинается ли это имя с заглавной буквы.

function isClass(fn) {
    return typeof fn === 'function' && /^(?:class\s+|function\s+(?:_class|_default|[A-Z]))/.test(fn);
}

EDIT:

Браузеры, которые уже поддерживают ключевое слово класса, могут использовать его при разборе. В противном случае вы застряли с заглавной буквой.

EDIT:

Как отметил Балуптон, Бабель генерирует function _class() {} для анонимных классов.

Добавлено _default в регулярное выражение, чтобы обнаружить такие классы, как export default class {} g13] BabelJS находится в стадии разработки, и нет гарантии, что они не изменят имена функций по умолчанию в этих случаях. На самом деле, вы не должны полагаться на это.

1
задан kukkuz 28 March 2019 в 09:17
поделиться