Adv*_*iov 2 javascript node.js ecmascript-6 babeljs
我正在尝试在ES6中运行快速应用程序.我正在使用以下工作流程:
使用以下gulp任务(在.babelrc中使用"es2015"和"stage-0"预设)将ES6透明到ES5 :
import gulp from 'gulp';
import gulpBabel from 'gulp-babel';
import sourcemaps from 'gulp-sourcemaps';
gulp.task('babel', () => {
gulp.src([
'someClass.js',
'app.js'
], {base: './', dot: false})
.pipe(sourcemaps.init())
.pipe(gulpBabel())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist'));
});
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好.
跑node dist/app.js.
以下代码位于someClass.js:
export default class SomeClass {
someMethod() {
return 1 + 1;
}
}
Run Code Online (Sandbox Code Playgroud)最后,以下代码位于app.js:
import SomeClass from './someClass';
//express config
console.log(SomeClass);
console.log(SomeClass.someMethod);
Run Code Online (Sandbox Code Playgroud)哪些日志:
[Function: SomeClass]
undefined
Run Code Online (Sandbox Code Playgroud)
这是相关的转换代码:
DIST/app.js
var _someClass = require('./someClass');
var _someClass2 = _interopRequireDefault(_someClass);
console.log(_someClass2.default);
console.log(_someClass2.default.someMethod);
Run Code Online (Sandbox Code Playgroud)
DIST/someClass.js
var SomeClass = function () {
function SomeClass() {
_classCallCheck(this, SomeClass);
}
_createClass(SomeClass, [{
key: "someMethod",
value: function someMethod() {
return 1 + 1;
}
}]);
return SomeClass;
}();
exports.default = SomeClass;
Run Code Online (Sandbox Code Playgroud)
为什么不someMethod定义?
因为someMethod是一个实例方法.您需要new使用该方法实例化该类.
const something = new SomeClass();
something.someMethod();
Run Code Online (Sandbox Code Playgroud)
如果要在不实例化类的情况下使用该方法,可以将其定义为静态方法.
export default class SomeClass {
static someMethod() {
return 1 + 1;
}
}
SomeClass.someMethod();
Run Code Online (Sandbox Code Playgroud)
在上面的评论中,您说您想将其用作回调.要将其用作回调,如果在方法中使用this关键字,则可能需要将上下文绑定到方法.否则,this关键字在被称为回调函数时不会指向该实例.
var something = new SomeClass();
element.addEventListener('click', something.someMethod.bind(something));
// or
element.addEventListener('click', (event) => something.someMethod(event));
Run Code Online (Sandbox Code Playgroud)