2016-06-10 63 views
2

我有一个使用RequireJS来管理依赖关系的现有项目(它在浏览器中完全运行,没有服务器端组件)。以前我一直在定义“类”(包括继承)的方式是这样的:使用RequireJS包含使用ES6语法定义的类

define([ 
    'jquery', 
    'classes/SomeParentClass', 
], function($, SomeParentClass){ 

    function ThisClass(data){ 

     SomeParentClass.call(this, data); 

     this.init = function(data){ 
      //Do stuff 
     } 

     this.init(data); 
    } 

    ThisClass.prototype = Object.create(SomeParentClass.prototype); 
    ThisClass.prototype.constructor = ThisClass; 

    return ThisClass; 

}); 

,然后当我想包括它在其它的类我会使用标准的RequireJS定义/要求的语法:

define(['classes/ThisClass'], function(ThisClass){ 
    var fooInstance = new ThisClass(fooData); 
}); 

我想试试我的手在ES6“阶级”的语法,所以我开始着手将我现有的类(我开始为简单起见,“静态”类)中的一个。目前,它看起来是这样的:

define([ 
    'jquery', 
], function($){ 

    class SomeClass { 

     static someStaticFn(){ 
      //Do whatever 
     } 
    } 

}); 

在哪里我目前阻碍是如何使用RequireJS引用SomeClass的(新ES6语法)。假设这甚至是可能的。

UPDATE

正如其他人在下面指出的那样,返回类是所有RequireJS关心。我可以发誓,我已经尝试过,但肯定它的工作。

万一别人是像我这样的假,并在类似情况下在这里结束了,我也想指出的是,我确实有一些成功与requirejs-babel插件,但只有后,我重新写了我ES6 export and import statements代替RequireJS的定义。已经做了,其他地方后,我包括类我不得不这样做,像这样:

define(['es6!ThisClass'], function(ThisClass){ ... 

我最终选择来修改在包括每其他模块类,所以将所有那些“ ES6!”字符串变成了相当的阻力。尽管将现有项目移植到ES6的this article提到了通过RequireJS配置自动执行该过程的方法。

但是,因为requirejs-babel在运行时会传输ES6代码,所以我现在可能不会将它加入到我的项目中。如果我确定我想要用ES6整个猪,我可能会使用“常规”Babel或可能TypeScript

+0

对RequireJS来说,无论类是使用'function'还是'class'语法来定义,它都没有什么区别。你只需要从你的模块定义中“返回”它。 – Bergi

回答

6

ES6类只是一个糖衣,仍然在下面有相同的实现。您可以按旧的方式使用它作为按功能创建类。还要注意浏览器兼容性https://kangax.github.io/compat-table/es6/

define([ 
    'jquery', 
], function($){ 

    return class SomeClass { 

     static someStaticFn(){ 
      //Do whatever 
     } 
    } 

}); 
相关问题