为什么将自定义传单控件添加为大写和小写?

时间:2018-08-02 15:28:14

标签: javascript leaflet

我正在查看扩展传单文档以添加custom controls

其中包含以下代码段,作为添加简单水印控件的示例:

L.Control.Watermark = L.Control.extend({
    onAdd: function(map) {
        var img = L.DomUtil.create('img');

        img.src = '../../docs/images/logo.png';
        img.style.width = '200px';

        return img;
    },

    onRemove: function(map) {
        // Nothing to do here
    }
});

L.control.watermark = function(opts) {
    return new L.Control.Watermark(opts);
}

L.control.watermark({ position: 'bottomleft' }).addTo(map);

为什么将控件同时分配给大写(L.Control.Watermark)和小写L.control.watermark变量?扩展JavaScript库时,这是通用约定吗?

2 个答案:

答案 0 :(得分:4)

如果您查看名为Extending Leaflet: Class Theory的教程,则会看到名为Factories的部分:

  

大多数Leaflet类具有相应的工厂功能。工厂函数与该类具有相同的名称,但是在 lowerCamelCase 中而不是在 UpperCamelCase 中。

基本上, lowerCamelCase 函数是实例化相应类的便捷方法。您会发现很多文章,说明为什么在构造函数上使用工厂函数,this one似乎很全面

答案 1 :(得分:4)

不幸的是,JavaScript中没有真正的约定。

大多数OOP语言都具有使用UpperCamelCase(PascalCase)的约定。

工厂模式主要是使您不必使用new关键字。为了区分两者,在Leaflet中,前者使用PascalCase,而后者使用较低的camelCase。

但是您会发现很多其他使用PascalCase作为工厂工厂的JS库(大多数情况下,它们在API中没有提供同等的类)。

要进一步了解为Leaflet选择的约定,您可以查看Leaflet/Leaflet #1430(远非如此)。