我正在查看扩展传单文档以添加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库时,这是通用约定吗?
答案 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(远非如此)。