【问题标题】:Leading Underscore transpiled wrong with es6 classeses6 类的前导下划线编译错误
【发布时间】:2015-07-18 13:53:57
【问题描述】:

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

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 实例的属性。

【问题讨论】:

    标签: javascript reactjs requirejs ecmascript-6 react-jsx


    【解决方案1】:

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

    是的,抱歉,这是一个非标准的 fb 主义。现在,您可以通过将/** @preventMunge */ 放在文件顶部来解决此问题并关闭此功能——但这也是一个相当大的 fb 主义。我们应该 (a) 把它变成一个转换选项(而不是直接的 docblock 指令)并且 (b) 让它选择加入而不是选择退出(因为它是非标准的)。

    对于上下文:我们在每个模块的基础上处理所有前缀不足的对象属性,部分原因是我们的前缀不足约定适用于对象和类。此外,即使我们想放松对象与类的区别,也无法判断(在一般情况下)属性是否是对 this 的引用,因为可能会出现别名变量(即 var self = this; self._stuff;)。

    【讨论】:

    • 这解释了这一点,我应该在搜索查询中添加“奇怪”,显然 :)
    猜你喜欢
    • 2016-01-19
    • 2022-12-11
    • 2021-09-21
    • 1970-01-01
    • 2016-07-01
    • 2017-03-25
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多