1

我正在用 js 编写自定义 UI 构建器。它使用工厂的实现来构建元素。为了确保清楚哪些函数是库的一部分,哪些是普通的旧 javascript 的一部分,我使用了function _FunctionName(). 但是,我发现总是做Factory._FunctionName().

我应该删除命名约定(function FunctionName())还是坚持它?

关于制作这样的库,是否有命名约定常见/最佳实践?

编辑:

var __PanelFactory = function () {
 //"private"
 var Panels = [];
 //exposed
 function _GetPanel(id) {
  //etc
 }
 return {
    _GetPanel: _GetPanel,
 };
};

var Factory = new __PanelFactory();
Factory. //this will show certain plain javascript functions 
         //like toString, constructor, hasOwnProperty, isPrototypeOf, etc...

//note that even jQuery can have the previous list used with something like
$(selector).

//So to differentiate I made sure my functions start with _
Factory._GetPanel(1);

//Should I just make it easy on myself and allow
Factory.GetPanel(1);

//Or is there value in leaving the naming convention in?
4

2 回答 2

4

以下是 javascript 中一些非常常见的约定。

常数

通常在 ALL_CAPS_WITH_UNDERSCORES

var MAX_COUNT = 100;
var BASE_URL = "http://example.com/api/";

变量

通常为小驼峰式

var currentCount = 0;
var userName = "timrwood";

构造函数

通常为大写驼峰式

function Factory(){}
var factory = new Factory();

方法

通常为小驼峰式

Factory.prototype.getPanel = function(){};
var factory = new Factory();
var panel = factory.getPanel();

私有变量/方法

通常在_lowerCamelCaseWithAUnderscorePrefix;

Factory.prototype._fetchPanel = function(){};
Factory.prototype.getPanel = function() {
    return this._fetchPanel();
}
于 2012-05-22T00:50:20.983 回答
1

SO上已经有一个问题链接到一个关于Javscript编码约定(包括命名)的好文档:

您询问的关键位:

  • 使用命名空间(带有初始大写名称)。

这在某种程度上是可选的,因为PanelFactory不会与纯 Javascript 冲突。但是,如果您正在制作一个供第三方使用的公共 API,它可能会与其他库发生冲突:

var MyApp = MyApp || {};
MyApp.__PanelFactory = function () { // ...
  • 去掉_所有函数名前的下划线 ()。

您不需要下划线,因为已经使用 JavaScript 一段时间的人知道每个对象(toString等)中内置的默认实例范围函数:

MyApp.PanelFactory = function () {
  // ...
  function GetPanel(id) {
    //etc
  }
  • 使用初始大写名称命名对象构造函数,但使用初始小写名称命名全局或命名空间范围的函数和实例范围的函数:

这只是一个标准约定。它无助于区分内置函数,但正如我在上一项中所说,您不需要。

MyApp.PanelFactory = function () {
  // ...
  function getPanel(id) {
    //etc
  }
  • 使用初始小写名称命名局部变量:

这将帮助您区分命名空间、对象构造函数和对象的实例(您希望存在自定义实例范围的函数,通常称为“方法”)。

var factory = new MyApp.PanelFactory();
var panel = factory.getPanel();
于 2012-05-22T00:52:54.523 回答