创建jquery扩展。范围问题

时间:2016-01-15 18:48:05

标签: javascript jquery

我创建了一个简单的jQuery扩展(它是我的第一个)。

$('#selector').myExtensionOtherMethod();

当我调用方法this时,this._ext不包含var result = coordinates.map(function(point) { return { lat: point.lat(), lng: point.lng() }; }); // access it console.log(result[0].lat); // or console.log(result[0]['lat']; 变量。我知道这是其他范围,但我知道有两种方法可以在两种方法中访问该变量。我能做到吗?

1 个答案:

答案 0 :(得分:2)

这不是一个范围问题。这是因为jQuery原型$.fn为您提供了一个jquery对象this。即使您每次将新的jQuery对象设置为上下文时都选择相同的元素,以便属性消失。您可以将该属性放在DOM元素上并实现您想要的结果。

(function($) {
    var MyClass = function(opt) {};
    //one of the methods of my extension
    $.fn.myExtension = function(opt) {
        this[0]._ext = new MyClass(opt);
        return this;
    };
    $.fn.myExtensionOtherMethod = function() {
        if (this[0]._ext) {
            //do something ..
        }
        return this;
    };
}(jQuery));

//using ..
$(document).ready(function() {
    $('#selector').myExtension({
        //options ..
    });
    $('#selector').myExtensionOtherMethod();
});

这只是上面的一个简单示例。如果你的选择器找到多个元素,你应该循环它们。但是我只是抓住了第一个索引,因为你选择了ID。

小提琴:https://jsfiddle.net/AtheistP3ace/gd1ehk0d/

如上所述@charlietfl,我同意这个评论。很高兴解释为什么你所做的并没有奏效,但可能有更好的方法来实现你所寻找的目标。