有没有办法在JavaScript中使用以下内容?
var foo = {
a: 5,
b: 6,
c: this.a + this.b // Doesn't work
};
Run Code Online (Sandbox Code Playgroud)
在当前形式中,此代码显然会抛出引用错误,因为this没有引用foo.但是,是有什么办法对早些时候宣布的其他属性在对象文本的属性值依赖?
调用静态方法的标准方法是什么?我可以考虑使用constructor或使用类本身的名称,我不喜欢后者,因为它没有必要.前者是推荐的方式,还是还有其他的东西?
这是一个(人为的)例子:
class SomeObject {
constructor(n){
this.n = n;
}
static print(n){
console.log(n);
}
printN(){
this.constructor.print(this.n);
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个类对静态方法进行内部调用:
export class GeneralHelper extends BaseHelper{
static is(env){
return config.get('env:name') === env;
}
static isProd(){
return GeneralHelper.is('prod');
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用任何关键字来替换下面一行中的类名:
GeneralHelper.is('prod');
Run Code Online (Sandbox Code Playgroud)
在PHP中也有self,static等ES6是否提供类似这些东西吗?
TY.
我看到Babel 6现在有三个预设:es2015,react和stage-x.我读到我可以这样设置.babelrc:
{
"presets": ["es2015", "react", "stage-0"]
}
Run Code Online (Sandbox Code Playgroud)
或直接在package.JSON中如下:
{
...,
"version": x.x.x,
"babel": {
"presets": ["es2015", "react", "stage-0"]
},
...,
}
Run Code Online (Sandbox Code Playgroud)
我可以进一步使用带有webpack的babel-loader,如下所示:
loader: 'babel?presets[]=es2015'
Run Code Online (Sandbox Code Playgroud)
所以为了编译所有好的和干净的我正在添加babel-loader,刚刚更新为使用Babel6,到这样的webpack配置:
module.exports = function(options) {
var jsLoaders = ['babel?presets[]=es2015'];
[...]
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loaders: jsLoaders
},
{
test: /\.jsx$/,
exclude: /node_modules/,
loaders: options.production ? jsLoaders : ['react-hot'].concat(jsLoaders)
},
[...]
Run Code Online (Sandbox Code Playgroud)
现在,当我在没有 .babelrc设置root或package.JSONpresets 选项的情况下进行编译时,即仅使用webpack配置中的babel-loader es2015预设集时,我的React组件类中出现了关于静态propTypes的意外标记错误:
ERROR in ./app/components/form/index.jsx
Module build failed: …Run Code Online (Sandbox Code Playgroud) ecmascript-6 ×3
javascript ×3
babeljs ×1
class ×1
config ×1
es6-class ×1
oop ×1
reactjs ×1
static ×1
webpack ×1