Javascript JQuery插件和原型,公开方法

Javascript JQuery插件和原型,公开方法,javascript,jquery,prototype,Javascript,Jquery,Prototype,我有一个非常古老的未维护插件,简而言之,它的结构如下: 插件本身工作正常,但我需要访问一些原型方法 var $el = $.find('myEl'); $el.searchlight(foo, bar); $el.clearResults() //this throws an exception 当我调用一个原型方法时,我得到一个异常,该方法不存在。是原型完全出了问题,还是我只是用错了方法(如果需要的话,我可以破解这个库,因为它已经7年没有维护了) 另外一个问题是,我如何使初始值设定项返回元

我有一个非常古老的未维护插件,简而言之,它的结构如下:

插件本身工作正常,但我需要访问一些原型方法

var $el = $.find('myEl');
$el.searchlight(foo, bar);
$el.clearResults() //this throws an exception
当我调用一个原型方法时,我得到一个异常,该方法不存在。是原型完全出了问题,还是我只是用错了方法(如果需要的话,我可以破解这个库,因为它已经7年没有维护了)


另外一个问题是,我如何使初始值设定项返回元素本身,我是否只需要在$.fn.searchlight中添加“return this.each”作为最后一个语句?

要解决这个问题,您可以将插件实例存储在元素的
data
属性中。然后,您可以根据需要对该函数调用方法,如下所示:

// in plugin:
$.fn.searchLight = function(url, options) {
    return this.each(function() {
        $(this).data('searchlight', new SearchLight(this, url, options));
    });
};

// in the calling code, instantiate
var $el = $('.searchLightElement').searchLight(foo, bar);

// then use the methods of the plugin
$el.data('searchlight').clearResults();

谢谢!!我甚至不知道你可以在数据上保存实例。实际上,我不得不玩弄你的把戏(在构造函数中设置一些成员,并将其清除),才能真正相信这是有效的xD。很荣幸能教给我一个我根本不知道存在的概念。没问题,很乐意帮忙。这是jQuery在对象中缓存数据属性的最大好处之一——您可以在其中存储任何数据类型,并完全按照存储的方式检索它