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

时间:2015-05-07 19:51:33

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

我正在经历一种非常奇怪的行为,甚至无法说出应该归咎于哪个包。 我的设置: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实例的属性。

1 个答案:

答案 0 :(得分:4)

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

  

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

     

对于上下文:我们在每个模块的基础上处理所有欠前缀对象属性,部分原因是我们的欠前缀约定适用于对象和类。另外,即使我们想要放松对象与类的区别,也不可能告诉(在一般情况下)属性是否是对this的引用,因为别名变量可能发生(即{{1 }})。