js面向对象封装ajax


为什么net.AjaxRequest是对象?而不是net?我之前一直以为AjaxRequest是方法。还有loader=this,这个this是指net.AjaxRequest的XMLHttpRequest对象?还有为什么net.AjaxRequest.onReadyState可以不用prototype?

  •  

  •  




当年话下
浏览 665回答 2
2回答

人到中年有点甜

如果把AjaxRequest当作方法不用new直接调用,函数里的this就会是是net对象,AjaxRequest.prototype里的方法就不能直接调用了,感觉AjaxRequest封装的不够好,理解都费了半天的劲。 onReadyState是AjaxRequest函数得一个属性,和AjaxRequest实例对象没有任何关系,他的this为AjaxRequest函数,onReadyState这个函数在调用时用了call方法把this改成了AjaxRequest实例对象,从整个代码来看onReadyState完全可以用var声明,而不要放到AjaxRequest下面,更容易理解,更简单的就是也放到prototype里头。从而loader=this,this表示的是AjaxRequest实例对象【不是XMLHttpRequest对象,XMLHttpRequest没有req属性的】 分析代码可以猜测,.net里放了一堆相关的操作方法,而每个操作方法定义的变量函数都要隔离开来,因此可以更简单更容易理解的实现(从jquery里学来的)12345678910111213141516171819202122var net={    //完完全全当做方法使用,而不用new了    AjaxRequest:(function(){        var AjaxRequest=function(url,onload){};        AjaxRequest.prototypt={            loadData:function(){                //着重onReadyState放到prototypt的改写过程                var This=this;//保存当前对象,不然onreadystatechange的this为window还是XMLHttpRequest?                this.req.onreadystatechange=function(){                    This.onReadyState();                };            }            ,onReadyState:function(){}        };        //net.AjaxRequest其实等于这个函数,他返回了一个对象从而不用new        return function(url,onload){            return new AjaxRequest(url,onload);        };    })()    ,其他功能:function(){}    ,其他功能x:function(){}};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java