前导下划线转译为 es6 错误 类

Leading Underscore transpiled wrong with es6 classes

我遇到了一个非常奇怪的行为,甚至不能说出应该归咎于哪个软件包。 我的设置:带有 JSXTransformer 和 jsx! 插件的 RequireJS 项目 我有一个像这样的 es6 class:

define([
    'react'
], function(
    React
) {

    class MyComponent extends React.Component {

        myMethod() {
            otherObject.someMethod()._privateProp; // Yes, we need this accessing and have no influence on it
        }

    }

    return MyComponent;

});

在 运行 r.js 之后生成的包中的转译输出是:

define('jsx!project/components/InputOutput',[
    'react'
], function(
    React
) {

    var ____Class8=React.Component;for(var ____Class8____Key in ____Class8){if(____Class8.hasOwnProperty(____Class8____Key)){MyComponent[____Class8____Key]=____Class8[____Class8____Key];}}var ____SuperProtoOf____Class8=____Class8===null?null:____Class8.prototype;MyComponent.prototype=Object.create(____SuperProtoOf____Class8);MyComponent.prototype.constructor=MyComponent;MyComponent.__superConstructor__=____Class8;function MyComponent(){"use strict";if(____Class8!==null){____Class8.apply(this,arguments);}}

        MyComponent.prototype.myMethod=function() {"use strict";
            otherObject.someMethod().$MyComponent_privateProp;
        };



    return MyComponent;

});

请注意 otherObject.someMethod().$MyComponent_privateProp; 是如何写在那里的。这显然会中断,因为它不是 MyComponent.

实例上的 属性

/** @preventMunge */ 添加到文件顶部。见 this GitHub issue:

Yes, sorry this is a non-standard fb-ism. For now you can work around this and toggle this feature off by putting /** @preventMunge */ at the top of your file -- but that's also a pretty big fb-ism. We should (a) turn this into a transform option (rather than a direct docblock directive) and (b) make it opt-in rather than opt-out (since it's non-standard).

For context: We munge all under-prefixed object properties on a per-module basis partly because our under-prefix convention applies to both objects and classes. Additionally, even if we wanted to lax the objects vs classes distinction, it's impossible to tell (in the general case) if a property is a reference to this since alias variables can occur (i.e. var self = this; self._stuff;).