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
创建一个对象,该对象在传单贴图(位于div
map\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);”非常感谢您的帮助