【问题标题】:Babel not transpiling ES6 computed property names [closed]Babel 没有转译 ES6 计算属性名称 [关闭]
【发布时间】:2017-01-09 16:47:23
【问题描述】:

Babel 没有转译 ES6 计算属性名称。它会编译其他所有内容。不知道发生了什么。使用最新版本的 cli。

var name = "John"; 
var age = 12; 
var count = 5; 
var postfix = 'age';

var person = {
    name, 
    age, 
    count,
    postfix,
    printName(){
        console.log(this.name); 
        this.count--; 
        while(this.count){
            this.printName(); 
        }
    },

    ['print' + this.postfix]: function(){
        console.log(this.age);
    }
};

person.printName(); 
person.printAge();

Babel 输出

var name = "John";
var age = 12;
var count = 5;
var postfix = 'age';

var person = _defineProperty({
    name: name,
    age: age,
    count: count,
    postfix: postfix,
    printName: function printName() {
        console.log(this.name);
        this.count--;
        while (this.count) {
            this.printName();
        }
    }
}, 'print' + postfix, function () { // Look here
    console.log(this.age);
});

【问题讨论】:

  • 看起来它被正确转译了,结果函数名应该是printage(),但你正试图使用​​printAge()来访问它,也许这就是问题所在。
  • 您的代码示例也不匹配。第一个使用this.postfix,第二个使用postfix 作为属性名称。我会第二个@Stubb0rn,你需要person.printage();
  • 似乎是我的错误+一些混乱。我认为它将被转换为计算值而不是“打印”+后缀。
  • 转换为计算值 'print' + postfix.
  • 是的(因此我评论中的混淆部分)。我实际上认为它会被计算为 printAge。

标签: javascript ecmascript-6 babeljs babel-cli


【解决方案1】:

在什么意义上它不转换计算的属性名称?这在我看来完全正确。

您是指它在postfix 之前删除了this 的事实吗?那是因为它们是相同的——this 在 ES6 中的计算属性名称中并不指代对象,而是指对象之外的任何内容。这是全局对象,您之前的@​​987654324@ 定义了全局对象的属性。所以this.postfixpostfix 在这种情况下是同义词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2018-06-04
    • 2020-05-29
    • 2019-10-20
    相关资源
    最近更新 更多