首先,我想说我不是很清楚如何解释我所做的事情以导致标题中提到的错误(uncaught TypeError: Illegal constructor
)。我正在使用gulpfile将我的Ecmascript 6编译成普通的Javascript。我的gulpfile看起来像这样:
var gulp = require('gulp');
var concat = require('gulp-concat');
var babel = require('gulp-babel');
gulp.task('compile', function () {
return gulp.src(['resources/assets/js/*.js', 'resources/assets/js/components/*.js'])
.pipe(babel({
presets: ['es2015']
}).on('error', logError))
.pipe(concat('bundle.js'))
.pipe(gulp.dest('public/js'));
});
gulp.task('watch', function () {
gulp.watch('resources/assets/js/**/*', ['compile']);
})
gulp.task('default', ['watch']);
function logError(err) {
console.log(err);
}
我的文件系统将所有文件合并到一个文件(bundle.js)中,在使用Babel编译后。
在浏览器控制台(Chrome或Firefox),下一行出现错误:
var _this = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, element));
这是此代码的非编译版本:
class Dropdown extends Node {
constructor(element) {
super(element);
this.registerEvents(['click', 'change', 'blur']);
}
onClick() {
this.$element.addClass('clicked');
}
}
这是相同类的编译代码:
var Dropdown = function (_Node) {
_inherits(Dropdown, _Node);
function Dropdown(element) {
_classCallCheck(this, Dropdown);
var _this = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, element));
_this.registerEvents(['click', 'change', 'blur']);
return _this;
}
_createClass(Dropdown, [{
key: 'onClick',
value: function onClick() {
this.$element.addClass('clicked');
}
}]);
return Dropdown;
}(Node);
我没有使用export default Dropdown
,因为我不在其他模块中导入模块(这是不必要的,因为每个文件都转换为一个文件,在其中一切都可以访问)。
我做了一些研究,唯一的原因是,因为有一个大写字母不允许出现的地方,所以才会出现这个错误。我没找到其他关于这个错误的原因。有人知道我为什么会出现这个错误吗?有人有解决方法吗?
Node
?如果它是 DOM 的Node
,你不能在 JavaScript 中扩展它。 - T.J. CrowderNode
(而且确实如此),那么您显然也无法实例化子类。 - Estus Flaskexport default superClass
),那么这样做是否可行? - Eran Machiels