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() {}}))());
首先,这可能不是一个 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() {}}))());