所以这是我的代码
function dl(name){
this.name=name;
this.getInfo();
};
dl.prototype={
getInfo:function(){
this.x=new XMLHttpRequest;
this.x.open('GET',this.name);
this.bind=this.setInfo.bind(this);
this.x.addEventListener('load',this.bind,false);
this.x.send();
},
setInfo:function(){
this.info=this.x.response;
this.x.removeEventListener('load',this.bind,false);
delete this.bind;
delete this.x;
this.insertDOM();
}
};
我使用function dl(){}
方法是因为我想使用this
.
我使用prototype
是因为当我创建很多时new dl(SOMEURL)
它不会触及内存。
但是是的,因为它内部有许多 xhr2 函数,我需要找到正确返回所有内容的最佳方法。
所以通常使用 xhr2 是美妙的......
function ajax(a,b,c){ //url,function,placeholder
c=new XMLHttpRequest;c.open('GET',a);c.onload=b;c.send();
}
//example onload function
function b(){ //don't even need event....
console.log(this.response)
}
好:我只传递函数引用(没有参数,这并不奇怪,我是 vars ..)
坏:在课堂上我失去了this
指向我的课堂的指针
所以我开始在我的班级中定义 xhr 对象
this.x=new XMLHttpRequest;
并用于bind
将其传递给我的下一个函数 this.setInfo
但是稍后要删除事件侦听器,我需要定义一个包含绑定函数的新变量。
this.bind=this.setInfo.bind(this);
我真的很讨厌那个。(我正在尝试使用尽可能多的变量并使用低内存)
我什至不知道这是否真的消除了事件。
我正在考虑的其他解决方案是将 this 引用到 xhr2 对象。
function dl(name){
this.name=name;
this.getInfo(this.name);
};
dl.prototype={
getInfo:function(){
var x=new XMLHttpRequest;
x.that=this;
x.open('GET',this.name);
x.addEventListener('load',this.setInfo,false);
x.send();
},
setInfo:function(){
this.that.info=this.response;
this.removeEventListener('load',this.setInfo,false);
this.that.insertDOM();
delete this.that;
}
};
A. 只是this.that
参考还是填满了记忆?
我需要确保在每个函数之后我删除/清除我不再需要的每个 var 来帮助垃圾收集器。
B. 编写这种类型的javascript类有更好的解决方案吗?
ps.:是否有更优雅的方式来初始化 dl 中的第一个函数?
这堂课是干什么用的??
它是 chrome 的下载管理器
这个怎么运作??
我将下载链接放入input
字段中
该类将 a 添加new dl(SOMEURL)
到数组中
使用 php cUrl 脚本检索文件信息。
将文件信息存储在类中
并执行另一个 xhr 并根据文件的大小检索文件的第一个块。
该块将附加到window.webkitrequestfilesystem
先前创建的文件中。
然后它继续循环 xhr 请求,直到所有块都被下载并附加到文件系统。
将文件偏移状态保存到window.LocalStorage
让我有机会稍后恢复下载。