通过原型继承对象

时间:2014-08-28 02:09:25

标签: javascript jquery leaflet prototypal-inheritance

我知道这个问题,我正在展示我对基于对象编程的基本概念的困惑,但我希望有人可以帮助我,因为我似乎无法绕过它:< / p>

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();

我想在这里发生的是MagnifyGlass创建一个对象,它作为传单地图中的一个层(位于div map_canvas中)。然后通过调用.begin.end来切换是否显示该图层。我正在正确地创建图层(magnifyingGlass)并且正在调用.begin,但不知何故,enlargeGlass对象并没有使它成为原型,我很确定我搞砸了这个&#不知何故。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这是一个范围问题。这是一个修复:

MagnifyGlass.prototype.begin=function(){
    var self = this;
    $("#map_canvas").mouseenter(function(){
        self.magnifyingGlass.addTo(map);
    }).mouseleave(function(){
        map.removeLayer(self.magnifyingGlass);
    });
}

正是LJ_1102所说的。