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

Lon*_*Dev 3 javascript leaflet

我正在查看扩展传单文档以添加自定义控件

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

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);
Run Code Online (Sandbox Code Playgroud)

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

nik*_*shr 5

如果查看名为“ 扩展传单:类理论”的教程,则会看到名为Factories的部分:

大多数Leaflet类具有相应的工厂功能。一个工厂函数具有相同的名称作为类,但在lowerCamelCase而不是UpperCamelCase

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


ghy*_*ybs 5

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

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

工厂模式主要是让你不用使用new关键字。为了区分两者,在 Leaflet 中,前者使用 PascalCase,后者使用小驼峰命名法。

但是您会发现许多其他 JS 库在其工厂中使用 PascalCase(尽管大多数时候它们在 API 中不提供等效的类)。

要更多地了解为 Leaflet 选择的约定,您可以查看Leaflet/Leaflet #1430(它远非明确)。