///第一个函数
function chat_say(){
var xmlHttp = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
var msg = document.getElementById('msg').value;
document.getElementById('msg').value = '';
msg = encodeURI(msg);
xmlHttp.onreadystatechange = function() {return chat_doHttpReadyStateChange.call(xmlHttp, xmlHttp)};
xmlHttp.open("GET", "./home/chat.php?msgto="+encodeURI(msgto)+"&say="+msg, true);
xmlHttp.send(null);
}///chat_doHttpReadyStateChange函数
function chat_doHttpReadyStateChange(xmlHttp) {
if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var msgcontent = __trim(xmlHttp.responseText);
if(msgcontent != ''){
var msglist = msgcontent.split('<sp>');
chat_write_msg('chat_area',msglist[0]);
chat_write_msg('chat_area',msglist[1]);
chat_write_msg('chat_area',msglist[2]);
chat_write_msg('chat_area',msglist[3]);
}
}
}问:为什么在chat_say中为么使用chat_doHttpReadyStateChange.call(xmlHttp, xmlHttp)?这里的call是怎么回事??
function chat_say(){
var xmlHttp = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
var msg = document.getElementById('msg').value;
document.getElementById('msg').value = '';
msg = encodeURI(msg);
xmlHttp.onreadystatechange = function() {return chat_doHttpReadyStateChange.call(xmlHttp, xmlHttp)};
xmlHttp.open("GET", "./home/chat.php?msgto="+encodeURI(msgto)+"&say="+msg, true);
xmlHttp.send(null);
}///chat_doHttpReadyStateChange函数
function chat_doHttpReadyStateChange(xmlHttp) {
if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var msgcontent = __trim(xmlHttp.responseText);
if(msgcontent != ''){
var msglist = msgcontent.split('<sp>');
chat_write_msg('chat_area',msglist[0]);
chat_write_msg('chat_area',msglist[1]);
chat_write_msg('chat_area',msglist[2]);
chat_write_msg('chat_area',msglist[3]);
}
}
}问:为什么在chat_say中为么使用chat_doHttpReadyStateChange.call(xmlHttp, xmlHttp)?这里的call是怎么回事??
<script>
var obj = {
name:'i am obj'
};
var func = function(arg){
alert(this.name+" "+arg)
}
func.call(obj," :D ");
<script>
调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[, [,.argN]]]]])参数
thisObj可选项。将被用作当前对象的对象。arg1, arg2, , argN可选项。将被传递方法参数序列。说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
=============
是':D',呵呵,这个是参数。
这样会不会更明白点。
=================
<script>
var obj = {
name:'i am obj'
};
var func = function(arg1,arg2,arg3){
alert(this.name+" "+arg1+arg2+arg3)
}
func.call(obj," 参数1 "," 参数2 "," 参数3 ");
//func.appy(obj,[" 参数1 "," 参数2 "," 参数3 "])//这个也行
<script>