论坛首页 AJAX版 JavaScript

谁能说说这段代码为什么会导致IE内存泄露

浏览 1532 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-03-08
// 运行时的JavaScript Class 定义和继承
// 看上去很传统,但这些脚本会导致在Internet Explorer中的内存泄漏.
function BaseClass() 
{    
    this.getName = function() 
    {        
        return "BaseClass";    
    };        
//BaseClass constructor code goes here 
}
function SubClass() 
{    
    //在对象实例建立时重载父类的getName方法     
    this.getName = function() 
    {        
        return "SubClass";    
    }    
    //SubClass constructor code goes here 
}
//Inherit the methods of BaseClass
SubClass.prototype = new BaseClass();
//Alerts "SubClass"
alert(new SubClass().getName());
   
时间:2007-03-08
看不出有泄漏。

你这里没有html元素的引用,纵使有循环引用,也没什么大问题,主要还是html元素占资源。
   
0 请登录后投票
时间:2007-03-08
SubClass.prototype.youfunction = new BaseClass();
这个原因吧!
   
0 请登录后投票
时间:2007-06-08
没有内存泄露,可以用drip这些工具来测试是否存在泄露
ie环境下的js泄露是因为ie的垃圾回收机制引起的,dom元素和js对象由不同的垃圾回收器回收,当他们循环引用时,才会引起内存泄露,当使用js做面象对象编程,程序中大量存在循环引用的情况,才会引起性能问题.可用闭包closure解决
   
0 请登录后投票
时间:2007-06-08
这是再正常不过的代码了(虽然getName最好是写在prototype上,而不是在构造函数里初始化)。不可能有泄漏,否则MS的脚本团队可以自杀谢罪了。
   
0 请登录后投票
时间:2007-06-08
那我只好一死以谢天下!啊……
   
0 请登录后投票
时间:2007-06-08
如果非要说泄漏的话,只是BaseClass的getName里有了一个对BaseClass函数scope引用,而这个因为prototype = new BaseClass而没有回收
严格说这个确实不是泄漏,只是不节约而已

更好的写法是 BaseClass.prototype.getName = ... 节省很多内存,多次创建对象,省去多个function () {...}
估计楼主说的可能是这个意思
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
JavaEye推荐