aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 7838|回复: 3

看源码遇到的问题

[复制链接]

9

主题

15

回帖

126

积分

新手入门

积分
126
发表于 2018-1-4 21:35:03 | 显示全部楼层 |阅读模式
  1. beginRequest = function(url,method="GET",referer,accept,flags=0,connectFlags=0){
  2.                
  3.                
  4.                 if( ! (#url) )
  5.                     return null,"未指定网址"
  6.          
  7.                 //分析网址
  8.                 var tUrl = ..inet.url.split(url);  
  9.                 if(!tUrl)
  10.                         return null,"地址格式不正确";
  11.                
  12.                 //开启HTTPS支持                                       
  13.             if( tUrl.schemeNum == 0x4/*_INTERNET_SCHEME_HTTPS*/){
  14.                     flags |=  0x800000/*_INTERNET_FLAG_SECURE*/;
  15.                     tUrl.schemeNum = 0x3/*_INTERNET_SCHEME_HTTP*/
  16.                 }
  17.                          
  18.                 if( this.request ){ this.endRequest() }
  19.                 if( this.connectFlags ) connectFlags = connectFlags | this.connectFlags;
  20.                 this.connect = ::InternetConnect(this.session,tUrl.host,tUrl.port,this.username,this.password,tUrl.schemeNum,connectFlags,0)
  21.                        
  22.         if( ! this.connect )
  23.                 return null,..lasterr( ,"beginRequest->InternetConnect")
  24.             
  25.             var proxyName = this.proxyUsername : ..thread.get("inet.proxyUsername");
  26.             if(proxyName){
  27.                     ::InternetSetOptionPtr(this.connect,0x2B/*_INTERNET_OPTION_PROXY_USERNAME*/,proxyName,#proxyName);
  28.                         var proxyPassword = this.proxyPassword : ..thread.get("inet.proxyPassword")
  29.                         if(proxyPassword)::InternetSetOptionPtr(this.connect,0x2C/*_INTERNET_OPTION_PROXY_PASSWORD*/,proxyPassword,#proxyPassword);
  30.                 }
  31.                
  32.             accept = accept||this.accept;
  33.             var lplpszAcceptTypes = {};
  34.             if(accept){
  35.                     var tAccept = ..string.split(accept,",");
  36.                     lplpszAcceptTypes = ..raw.toarray( #tAccept+1,"ustring","array" );
  37.                     lplpszAcceptTypes.array = tAccept;
  38.             }
  39.             if(this.flags ) flags = flags | this.flags;
  40.             var referer =  referer||this.referer;
  41.             if( referer === null ){
  42.                     referer = ..inet.url.joinpath(url,"/");
  43.             }
  44.             this.request = HttpOpenRequest(this.connect,method,..string.concat(tUrl.path ,tUrl.extraInfo),null,referer, lplpszAcceptTypes, flags ,0);
  45.                
  46.                 if( ! this.request ){
  47.                         return null,..lasterr(,"beginRequest->HttpOpenRequest");
  48.                 }
  49.                 this.referer = url;
  50.                 this.lastRequestUrl = url;
  51.                 return true;
  52.         };
复制代码


在看inet.http中的beginrequest这个方法的源码时,有些问题始终想不通。
这个方法的签名是
beginRequest = function(url,method="GET",referer,accept,flags=0,connectFlags=0)

在源码中我看到这一句
if( this.connectFlags ) connectFlags = connectFlags | this.connectFlags;

首先是this.connectFlags这个变量我没弄清楚,它应该不是方法签名那个形参connectFlags。也许是声明了一个变量?
那为什么下面不是
this.connectFlags = connectFlags | this.connectFlags?

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 2018-1-4 22:09:55 | 显示全部楼层
因为这里是要取this.connectFlags  去改 connectFlags,
至于你要问为什么不反过来,但你为什么要反过来呢?!你能解释一下反过来写的好处吗?!

9

主题

15

回帖

126

积分

新手入门

积分
126
 楼主| 发表于 2018-1-4 22:11:51 | 显示全部楼层
Jacen.He 发表于 2018-1-4 22:09
因为这里是要取this.connectFlags  去改 connectFlags,
至于你要问为什么不反过来,但你为什么要反过来呢 ...

没有,我只是对this的用法还不明确,加上这里有几个同名的变量,搞的自己有点晕头转向的。

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 2018-1-4 23:15:42 | 显示全部楼层
goodev 发表于 2018-1-4 22:11
没有,我只是对this的用法还不明确,加上这里有几个同名的变量,搞的自己有点晕头转向的。

this就是你创建的 inet.http对象。
可以先写个简单的类对象试一下理解了基本语法,再去看标准库的源码比较好
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-4-15 04:16 , Processed in 0.053098 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表