Javascript 何时使用L.TileLayer vs L.TileLayer

Javascript 何时使用L.TileLayer vs L.TileLayer,javascript,leaflet,Javascript,Leaflet,我刚刚使用传单为一个网站创建了一张地图,并注意到要添加一个平铺层,至少可以使用两种方法,L.TileLayer()和L.TileLayer(),它们的名称只因单个字符的大小写而有所不同 但是,虽然这两种方法返回的对象都可以添加到L.map()返回的映射对象中,L.TileLayer()返回的对象似乎没有addTo()方法,而L.TileLayer()返回的对象。例如,两者都有 var map = L.map('map'); var tiles = new L.TileLayer(<tile

我刚刚使用传单为一个网站创建了一张地图,并注意到要添加一个平铺层,至少可以使用两种方法,
L.TileLayer()
L.TileLayer()
,它们的名称只因单个字符的大小写而有所不同

但是,虽然这两种方法返回的对象都可以添加到
L.map()
返回的映射对象中,
L.TileLayer()
返回的对象似乎没有
addTo()
方法,而
L.TileLayer()
返回的对象。例如,两者都有

var map = L.map('map');
var tiles = new L.TileLayer(<tileUrl>, {attribution: <tileAttrib>});
map.addLayer(tiles);

TL;医生:

这两种方法都是有效且等效的:

var foo = L.tileLayer(arguments);
var foo = new L.TileLayer(arguments);
这两者在语法上是有效的(因为Javascript的历史包袱),但最终会导致错误:

var foo = new L.tileLayer(arguments);
var foo = L.TileLayer(arguments);

要添加tilelayer,至少可以使用两种方法,
L.tilelayer()
L.tilelayer()

其实,它们不是两种方法。从技术上讲,
L.TileLayer
对象的一个实例,
L.TileLayer
函数的一个实例,它继承了
对象的原型。而
L
充当名称空间而不是类实例

你看,Javascript中的面向对象编程很奇怪。您可以对几乎任何具有原型的对象使用。对于大多数精通“正确的”OOP的人来说,理解起来很混乱

如今,有了ES2015标准和花哨的
关键字,这并不是一个真正的问题(我认为这是一个问题,但隐藏在语法糖层之下)。但回到过去,开发者不得不求助于,比如说,有时会涉及到

传单使用了这些方法的组合——作为一种不希望出现的副作用,
L.TileLayer
变成了一个
函数
,人们可以直接调用
L.TileLayer()
,这非常令人困惑

传单还使用了:返回类实例的函数的概念。引述自:

大多数传单类都有相应的。factory函数与类具有相同的名称,但使用的是
lowerCamelCase
而不是
UpperCamelCase

function myBoxClass(name, options) {
    return new MyBoxClass(name, options);
}
这只是为了方便起见:它让用户不用再键入
new
关键字,回到了
new
关键字令人恐惧的时代

但这会产生另一个不希望出现的副作用,因为在Javascript中,所有的
函数都有一个原型,这意味着您可以像

 function myFunction() { ... }
 var wtf = new myFunction();
因此,
newl.tillelayer()
也是有效语法(但在运行时失败)


那么
L.TileLayer()的用途是什么

同样地,
L.TileLayer()
作为函数调用是一个不希望出现的副作用。但是
L.TileLayer
表示一个类,因此有一个对该类的引用非常重要,因为:

 if (layer instanceof L.TileLayer)
vs
var foo = new L.tileLayer(arguments);
var foo = L.TileLayer(arguments);
function myBoxClass(name, options) {
    return new MyBoxClass(name, options);
}
 function myFunction() { ... }
 var wtf = new myFunction();
 if (layer instanceof L.TileLayer)