jQuery可以复制现有的jQuery方法或非DOM对象以进行扩展

jQuery可以复制现有的jQuery方法或非DOM对象以进行扩展,jquery,jquery-plugins,Jquery,Jquery Plugins,基本上,我正在使用一个现有的jQuery插件,我希望有两个实例可以从jQuery中使用 因此,对于此html: <div id="div_1"></div> <div id="div_2"></div> 现在,myplugin由一个脚本加载,我从html文件顶部的外部源中拉入该脚本 如果Iconsole.log($())我可以看到所有原生jQuery方法以及插件脚本添加的方法的列表 基本上,经过一点研究,我认为这样的方法应该行得通,但我不知道具体

基本上,我正在使用一个现有的jQuery插件,我希望有两个实例可以从jQuery中使用

因此,对于此html:

<div id="div_1"></div>
<div id="div_2"></div>
现在,myplugin由一个脚本加载,我从html文件顶部的外部源中拉入该脚本

如果I
console.log($())我可以看到所有原生jQuery方法以及插件脚本添加的方法的列表

基本上,经过一点研究,我认为这样的方法应该行得通,但我不知道具体怎么做

$.fn.copy_of_my_plugin = function () {
    return this.each(function () {
        var instance = $(this);
        if (instance.data('copy_of_my_plugin')) {
            return;
        }
        var copy_of_my_plugin = new $.extend(true, {}, $.fn.myplugin);
        instance.data('copy_of_my_plugin', copy_of_my_plugin);
    });
};
我可以
console.log($())并查看正在将“我的插件的副本”添加到jquery中,但看起来似乎没有实际复制myplugin函数的任何内容


有人知道我做错了什么吗?

很难弄清楚你想在代码中做什么。您确实意识到,在您的示例中,您的变量“instance”实际上被设置为dom元素id=“div_2”。您是在尝试获取同一插件的两个实例,还是仅尝试使用两个插件名称获取相同的功能?你确定你不只是想这么做吗

$.fn.a_copy_of_my_plugin = $.fn.myplugin;
如果你使用你的代码,当你使用console.log()时,你可以“查看你的插件”-它实际上不是任何东西的副本,它只是一个指向你在上面的代码中分配给$.fn.copy_的函数的指针。仅当您执行$('#div_2')。复制_myplugin()的_;那么,它是否正在运行试图“创建第二个实例”的函数呢

如果要立即运行该函数,可以替换};带}($);作为最后一行代码

正如您的代码一样,this.each仅在您使用$('#div_2')时运行;然后尝试在jQuery的数据缓存中为$(“#div_2”)存储新对象的副本


你可能想看看这个。我认为它应该做你想做的事

在阅读链接并消化你的评论之后,这确实让我找到了正确的答案。我是在复制指向原始函数的指针,而不是复制创建插件的对象。我是用MyPLuginCopy=new$.extend(true,{},window.MyPlugin)实现的;然后访问它的方法。
$.fn.a_copy_of_my_plugin = $.fn.myplugin;