浏览 1532 次
|
锁定老贴子 主题:谁能说说这段代码为什么会导致IE内存泄露
精华帖 (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());
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-03-08
看不出有泄漏。
你这里没有html元素的引用,纵使有循环引用,也没什么大问题,主要还是html元素占资源。 |
|
| 返回顶楼 | |
|
时间:2007-03-08
SubClass.prototype.youfunction = new BaseClass();
这个原因吧! |
|
| 返回顶楼 | |
|
时间:2007-06-08
没有内存泄露,可以用drip这些工具来测试是否存在泄露
ie环境下的js泄露是因为ie的垃圾回收机制引起的,dom元素和js对象由不同的垃圾回收器回收,当他们循环引用时,才会引起内存泄露,当使用js做面象对象编程,程序中大量存在循环引用的情况,才会引起性能问题.可用闭包closure解决 |
|
| 返回顶楼 | |
|
时间:2007-06-08
这是再正常不过的代码了(虽然getName最好是写在prototype上,而不是在构造函数里初始化)。不可能有泄漏,否则MS的脚本团队可以自杀谢罪了。
|
|
| 返回顶楼 | |
|
时间:2007-06-08
那我只好一死以谢天下!啊……
|
|
| 返回顶楼 | |
|
时间:2007-06-08
如果非要说泄漏的话,只是BaseClass的getName里有了一个对BaseClass函数scope引用,而这个因为prototype = new BaseClass而没有回收
严格说这个确实不是泄漏,只是不节约而已 更好的写法是 BaseClass.prototype.getName = ... 节省很多内存,多次创建对象,省去多个function () {...} 估计楼主说的可能是这个意思 |
|
| 返回顶楼 | |









