冲突类

时间:2015-08-10 08:35:14

标签: javascript naming-conventions naming

TL; DR

我们如何命名具有扩展JavaScript默认类功能的类的类(例如Array)。

说明

我是AlgoFlux Runtime的作者,这是一个提供数据结构,算法和处理类的小型库。这个库包含arrayobjectmathcolors和其他很酷的东西的辅助模块。

我该如何命名?现在我使用以下约定:

  • MathH
  • ArrayH
  • ObjectH
  • ..

H暗示Helper类。现在看起来有点难看。

名称间距?

是的,我可以封装所有这些AlgoFlux.Arrays.unique()。但是我想保持简短,如果JS支持using <class>语句,就像在C#中一样,这将是一个好主意。

原型?

扩展内置类是一个坏主意。为此制作单独的模块是一个很好的设计决策。

对此问题的任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

问题可能有点基于意见,但有一些选择:

目前:命名空间和/或AMD。最终:ES6's modules

<强>名字空间:

  

是的,我可以封装所有这些AlgoFlux.Arrays.unique()。但我想保持简短...

嗯,你不需要复数(例如AlgoFlux.Array.unique)。让您的用户担心短缺。例如,如果我想要,那么在我的代码中包含你的库后我可以这样做:

var A = AlgoFlux;

然后我使用A.Array.unique(),它只比ArrayH.unique()长一个字符。

  

......如果JS支持使用语句,那将是一个好主意,就像在C#中一样。

上面的var声明很接近; ES6模块一直在那里。

<强> AMD

如果你支持AMD,那么与上面的命名空间一样,你的用户可以根据他们的代码做出这个决定:

var A = require("AlgoFlux");

......甚至:

var ArrayH = require("AlgoFlux.Array");

......如果他们愿意的话。 : - )

ES6模块:

当你可以开始在野外使用它们时(因为它们是全新的,广泛的支持还没有),它将会是:

import A from 'AlgoFlux';

import {Array as ArrayH} from 'AlgoFlux';

答案 1 :(得分:0)

我会用下划线表示,这样你就可以拥有

 your_namespace.method(someArray)

 your_namespace(someArray).method1().method2() etc

AlgoFlux对于命名空间来说有点太长了(并且jC中的lowerCamelCase更常用),因此我会选择像

这样的东西。
afx.array.getRandomValues(...)

d3是这种多级命名空间的完美示例。