1 var  net  =   new  Object();//命名空间,防止全局变量的冲突
 2 net.READY_STATE_UNINITIALIZED  =   0 ;
 3
 4 net.ContentLoader  =   function (url, onload, onerror) {
 6     this .url  =  url;
 7     this .req  =   null ;
 8     this .onload  =  onload;//保存是方法名
 9     this .onerror  =  (onerror)  ?  onerror :  this .defaultError;
10     this .loadXMLDoc(url);
11 }

12 net.ContentLoader.prototype  =   {
13    loadXMLDoc: function (url) {
15       
16        try {
                   var  loader  =   this ;//重点!loader为new出来的对象。
                  this .req.onreadystatechange  =   function () {
20            loader.onReadyState.call(loader);//重点! 因为loader为new出来的对象,所以它可以调用对象内部的属性或方法。应该可以像在catch方法内一样使用this调用原型内的方法。
21              }

23           }

24        catch (err) {
26            this .onerror.call( this );//同上
27       }

28    }

29    onReadyState: function () {
31        var  req  =   this .req;
32        var  ready  =  req.readyState;
33       
34        this .onload.call( this );//this.onload为一个方法名。这样是调用new出来的对象的回调函数。
35       
36        this .onerror.call( this );
37    }

38    defaultError: function () {
40       alert();
41    }

42 }

//这样做,可以把所有的状态都保存在对象内部,而不是设置一个全局变量。