LeafletJS 中的扩展是如何工作的,为什么我需要一个中间属性才能使其正常工作?

How does extending work in LeafletJS and why do I need an intermediary attribution for it to work correctly?

首先,这可能不是一个 LeafletJS 问题,而只是一个 JS 问题,但我直到 Leaflet 才遇到它。

我最近一直在尝试使用 Leaflet,并且在某些时候想将 Control 对象的扩展版本传递给函数(对于那些也使用 Java 或类似语言的人,我试图执行与实例化匿名 class 类似的操作)。

所以:

鉴于 class L.Control(我想用方法 x 扩展),我尝试了:

func(new L.Control.extend({x: function() {}})());

惨败,因为函数 func 的参数未定义。

但是:

var v = L.Control.extend({x: function() { }}); 
func(new v());

完美地工作,如 new v() returns,正如预期的那样,L.Control 对象具有额外的 x 函数。

底线:2 个代码片段之间有什么区别,我怎样才能使它与单行代码一起工作(如果可能)?

谢谢!

经过一番实验,自己摸索出来了

问题出在操作顺序上,解决办法是加一组括号,一行变成:

func(new (L.Control.extend({x: function() {}}))());