2016-12-05 90 views
1

我正在做一些香草与ES6的Javascript。我简单的代码在3个文件划分是这样的:如何在Javascript ES6中“隐藏”类名?

// File A 
class A { 
    // ... 
} 

// File B 
class B { 
    // ... 
} 

// File C 
class C { 
    constructor() { 
     this.a = new A(); 
     this.b = new B(); 
    } 
} 

A类和B类C的只用了,所以我想“隐藏”这些类的名称,并防止它们污染的范围。

我该怎么做,同时让他们在不同的文件?也许我应该使用ES6模块功能,但我不知道如何。

+2

*任何*模块系统会有所帮助。无论如何,如果您已经使用了转换器,ES6模块肯定是您的选择。 –

回答

2

您可以使用ES6模块。

在文件A和B导出类:

// File A 
export default class A { 
    // ... 
} 

// File B 
export default class B { 
    // ... 
} 

而且在文件C导入:

import A from './A'; 
import B from './B'; 

// File C 
class C { 
    constructor() { 
     this.a = new A(); 
     this.b = new B(); 
    } 
} 

不幸的是,ES6模块不支持原生呢,所以你应该transpile代码使用Babel。如果您想在浏览器中运行代码,则可以使用Rollup.js将模块捆绑到一个文件中。

1

你是在正确的道路上,使用modules

在你的情况下,你将有三个模块ABC。模块C将导入模块AB。您的公共API将是模块C,阻止AB类污染范围。

假设这些模块将在同一个目录中,这将导致以下结构。

a.js

export default class A { 
    // ... 
} 

b.js

export default class B { 
    // ... 
} 

c.js

import A from './a' 
import B from './b' 

export default class C { 
    constructor() { 
     this.a = new A(); 
     this.b = new B(); 
    } 
} 
+1

谢谢!但是,一旦我将c.js包含到我的html中,变量A和B是否仍然会污染范围? – Thomas

+0

模块工作方式可以防止这种情况发生。 A和B类不会在外面看到,因为它们不会被导出。 –

+0

@Thomas:浏览器不支持模块。您必须使用将所有文件合并到一个文件中的模块捆绑器。 –