Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery循环引用_Jquery_Coffeescript - Fatal编程技术网

jQuery循环引用

jQuery循环引用,jquery,coffeescript,Jquery,Coffeescript,我制作了一个jQuery插件/小部件作为OOP对象,并在该对象中将HTML/jQuery元素($elem)保存为属性。我还将该对象的引用(使用new创建)存储在HTML元素的data属性中。这会导致循环引用/内存泄漏吗 CoffeeScript中的代码大致如下: class wid constructor @$elem = $('<div>hello</div>') @$elem.appendTo('body') @$elem.data('ob

我制作了一个jQuery插件/小部件作为OOP对象,并在该对象中将HTML/jQuery元素(
$elem
)保存为属性。我还将该对象的引用(使用
new
创建)存储在HTML元素的
data
属性中。这会导致循环引用/内存泄漏吗

CoffeeScript中的代码大致如下:

class wid
  constructor
    @$elem = $('<div>hello</div>')
    @$elem.appendTo('body')
    @$elem.data('obj',@)  // adding the instance to the element's data attribute
  updateText: (p)->
     @$ele.text(p)

widget = new wid()
class-wid
建造师
@$elem=$('hello')
@$elem.appendTo('body'))
@$elem.data('obj',@)//将实例添加到元素的数据属性
updateText:(p)->
@$ele.text(p)
widget=newwid()

在真正的浏览器上,没有。Internet Explorer是微软浏览器形状的对象,对于DOM和Javascript有单独的垃圾收集器,因此很容易创建循环引用。由于IE与操作系统紧密集成,仅仅关闭浏览器并不能释放内存:操作系统必须重新启动


然而,这是一件好事:随着IE变得越来越慢,由于对象引用不灵活,用户学到了有关Microsoft质量的重要一课。

请发布您的代码。作为什么的属性?当删除所述元素时,数据属性中的数据将被清除,从而允许清除内存。使用jQuery插件在元素数据中包含对对象实例的引用是很常见的。不需要两个参数来设置数据吗,只有一种情况是检索数据?输入错误…用代码更新..好吧,通过这个思维过程,我可以在浏览器中嗅探IE,并故意运行代码,这会减慢浏览器的速度。我想你会发现,用户指责你的网站太慢,而不一定是他们的特定浏览器。@nzifnab完全正确。撇开明显的偏见不谈,值得注意的是,IE自第8版以来就有了一个标记和扫描GC,它不具有引用计数器对循环引用泄漏的一般敏感性。(同样值得注意的是,对于我们这些自1996年以来一直没有向外看过的人来说,杀死
iexplore.exe
进程将释放它分配的任何内存,就像NT盒上的任何其他进程一样。)@nzifnab——这是这个策略的妙处!它不会比任何其他网站更影响网站的工作,也不会比任何其他应用程序更影响浏览器。所发生的一切是,他们以一种相对轻松的方式理解微软对用户体验的承诺。@AaronMiller——问题不在于GC策略,而是有两个独立的内存池,它们之间没有GC协调。至于内存问题,我还没有亲自测试过,我只是照搬了微软公司在这个问题上的指导,是的,这可能不完全可靠。@Malvolio我想看看你所说的任何内容的主要来源。