Javascript 通过原型继承对象
我知道这个问题表明了我对基于对象编程的基本概念的困惑,但我希望有人能帮我解决这个问题,因为我似乎无法理解:Javascript 通过原型继承对象,javascript,jquery,leaflet,prototypal-inheritance,Javascript,Jquery,Leaflet,Prototypal Inheritance,我知道这个问题表明了我对基于对象编程的基本概念的困惑,但我希望有人能帮我解决这个问题,因为我似乎无法理解: function MagnifyGlass(){ var magnifiedTiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png'); var magnifyingGlass = L.magnifyingGlass({layers: [ magnifiedTiles ]}); this.magni
function MagnifyGlass(){
var magnifiedTiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png');
var magnifyingGlass = L.magnifyingGlass({layers: [ magnifiedTiles ]});
this.magnifyingGlass = magnifyingGlass;
}
MagnifyGlass.prototype.begin=function(){
$("#map_canvas").mouseenter(function(){
this.magnifyingGlass.addTo(map);
}).mouseleave(function(){
map.removeLayer(this.magnifyingGlass);
});
}
MagnifyGlass.prototype.end=function(){
map.removeLayer(this.magnifyingGlass);
$("#map_canvas").unbind();
}
var mg= new MagnifyGlass();
mg.begin();
我想在这里实现的是
magnizeglass
创建一个对象,该对象在传单贴图(位于divmap\u画布
中)中用作图层。然后通过调用.begin
或.end
来切换该层是否显示。我正在正确地创建图层(放大镜
)并且正在调用.begin
,但是不知怎么的,放大镜对象没有进入原型,我很确定我已经搞砸了。谢谢您的帮助。这是一个范围问题。这里有一个解决方案:
MagnifyGlass.prototype.begin=function(){
var self = this;
$("#map_canvas").mouseenter(function(){
self.magnifyingGlass.addTo(map);
}).mouseleave(function(){
map.removeLayer(self.magnifyingGlass);
});
}
正是LJ_1102所说的。在mouseenter事件处理程序中,您使用的是这个。放大镜,而在处理程序中,“this”是函数范围,而不是对象范围。(mouseleave处理程序也是如此)谢谢LJ,但不幸的是,我仍然不知道如何正确使用
这个。还是我做错了的全部逻辑?好吧,现在我明白了。非常感谢下面的答案描述了正确的方法,也可以使用函数的“bind”函数,如“function eventlistener(){};eventlistener.bind(this);”非常感谢您的帮助