Глядя на скомпилированный код, сгенерированный 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 находится в стадии разработки, и нет гарантии, что они не изменят имена функций по умолчанию в этих случаях. На самом деле, вы не должны полагаться на это.