繁体   English   中英

领先的Underscore在es6课程中出现了错误

[英]Leading Underscore transpiled wrong with es6 classes

我正在经历一个非常奇怪的行为,甚至无法说出应该归咎于哪个包。 我的设置:RequireJS项目与JSXTransformer和jsx! 插件我有这样的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实例的属性。

/** @preventMunge */添加到文件的顶部。 看到这个GitHub问题

是的,对不起,这是一个非标准的fb-ism。 现在你可以解决这个问题,并通过将/** @preventMunge */放在文件的顶部来关闭此功能 - 但这也是一个非常大的fb-ism。 我们应该(a)将其转换为转换选项(而不是直接docblock指令)和(b)使其选择加入而不是选择退出(因为它是非标准的)。

对于上下文:我们在每个模块的基础上挖掘所有欠前缀对象属性,部分原因是我们的欠前缀约定适用于对象和类。 此外,即使我们想松懈的对象VS类的区别,这是不可能告诉(一般情况下),如果一个属性是一个参考this ,因为别名变量可以出现(即var self = this; self._stuff;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM