我应该如何命名我的javascript库函数,以便它们可以与普通的旧javascript区分开来?

时间:2012-05-21 23:59:37

标签: javascript

我正在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?

2 个答案:

答案 0 :(得分:3)

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

常量

通常在ALL_CAPS_WITH_UNDERSCORES

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

变量

通常在lowerCamelCase中

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

构造

通常在UpperCamelCase中

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

方法

通常在lowerCamelCase中

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

私人变量/方法

通常在_lowerCamelCaseWithAUnderscorePrefix;

Factory.prototype._fetchPanel = function(){};
Factory.prototype.getPanel = function() {
    return this._fetchPanel();
}

答案 1 :(得分: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();