Javascript 如何保存对象实例(和选项)以在将来应用方法

Javascript 如何保存对象实例(和选项)以在将来应用方法,javascript,jquery,Javascript,Jquery,我正在尝试为jQuery编写一个扩展,通过该扩展,您可以通过字符串传递方法,并将这些方法应用于指定的元素。但是,我无法理解以这种方式调用方法如何确定调用该方法时最初设置的选项 考虑这一点(以jqueryui为例): 第二次调用如何知道设置了什么someoption 例如,如果someoption是dateFormat,则日期选择器将自动更改所提供日期的格式,以匹配formatDate中指定的格式。。。第二个调用如何知道formatDate的值是多少 我能看到这是如何实现的唯一方法是这样(显然遗漏

我正在尝试为jQuery编写一个扩展,通过该扩展,您可以通过字符串传递方法,并将这些方法应用于指定的元素。但是,我无法理解以这种方式调用方法如何确定调用该方法时最初设置的选项

考虑这一点(以jqueryui为例):

第二次调用如何知道设置了什么
someoption

例如,如果
someoption
dateFormat
,则日期选择器将自动更改所提供日期的格式,以匹配
formatDate
中指定的格式。。。第二个调用如何知道
formatDate
的值是多少

我能看到这是如何实现的唯一方法是这样(显然遗漏了一些细节):

这是实现这一目标的正确方法吗?如果是,如何获得选择器,它是否可靠(此部分的潜在解决方案)

我能看到这是如何实现的唯一方法就是这样

是的,将它们存储在插件作用域的静态变量中是一种方法。但是:您需要一种可靠的方法来为所有DOM元素(您的
somefunction
)确定唯一的
选择器
,并且您将遇到内存泄漏,因为您不知道何时可以取消存储信息

相反,大多数插件都使用标准,这将解决这两个问题。从:


其他方法(只是为了完整性):将数据直接存储在DOM对象的属性上(这可能导致某些已知浏览器上的内存泄漏),或者从方法返回一个小部件实例对象(而不是可链接的jQuery包装器-这需要一种与您请求的调用策略不同的调用策略).

你看过插件的来源了吗?@FelixKling有个想法!!哈哈哈,真不敢相信我没想到!我只使用了
datepicker
作为示例,但我想解决方案就在这里!不管怎样,如果有人有任何意见或潜在的解决方案,我仍然希望看到:-)这正是我想要的,谢谢!你可以发布一个这样的例子吗?是这样的:
$(this).data('datepicker',options)?@BenCarey看看,库中所有UI组件的基类。该方法负责在
$.fn
上创建一个方法,该方法创建一个小部件实例或调用当前实例的方法。@BenCarey是的,jQuery UI也是这样做的。用于读取和写入(其中
object
是小部件的构造函数)。@BenCarey:是的,没错。尽管大多数插件都直接使用“内部”功能。
$('#foo').datepicker({ someoption: true });

$('#foo').datepicker('setDate','10/10/2013');
var datepickers = new Array();

$.fn.datepicker = datepicker;
function datepicker(options){
    // Get the selector somehow
    var selector = somefunction($(this));
    // Save the options to the datepickers array
    // for the given selector
    datepickers[selector] = options;
}
// in the init function:
$.data(target, "datepicker", inst);

// in other methods:
var inst = $.data(target, "datepicker");