<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单生活@NET</title>
	<atom:link href="http://lee.kometo.com/feed" rel="self" type="application/rss+xml" />
	<link>http://lee.kometo.com</link>
	<description>正确的判断来自经验，但经验往往来自错误的判断</description>
	<lastBuildDate>Sun, 07 Mar 2010 11:15:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>国内6款远控工具心得（转）</title>
		<link>http://lee.kometo.com/archives/540</link>
		<comments>http://lee.kometo.com/archives/540#comments</comments>
		<pubDate>Sun, 07 Mar 2010 11:10:56 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[IT前沿]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=540</guid>
		<description><![CDATA[以下为转贴内容


	如果你认为此贴还没有背弃广大网友.就回个帖，也算是对我的支持~！~本人平时没什么爱好，就喜欢玩远控，虽然不懂编程、但随着时间流逝小问题还是可以应付的，我把心德跟大家分享下，就算是给新手们个建议吧.
这几年手里暂了不少远控，大多都是收费的，从最早的灰鸽子，到现在的红黑远控(前身红黑)。每一个牌子、版本都有用，到目前为止，相信我们菜鸟中能用到我这么全的，真没几个.我以下举例6种，相信在互联网能拿得出手的也就这几个，什么GH0ST、IS、、、等等都拿不行.其他版本的，大家就不要去想了，要嘛残次品、要嘛挂羊头卖狗肉.远控这个东西你不能看他什么时候出现的。有的人认为新出来的东西就是好的，&#8220;错&#8221;-或者说&#8220;不一定&#8221;，那要看在什么前提下出现的.当然，我举这几个例子里也有假的（后话谈）&#8230;

这里我给大家举几个网上流传已久的有关软件形容词，叫他&#8220;形容词&#8221;也好，叫他&#8220;专业术语&#8221;也行，反正就是为了笼统一点，能让大家明白。
1：专业个人版=什么叫专业个人版？
意思就是说某一款软件在这个世界上它的软件源码内部特征是全球唯一的。
打个比喻，人类的DNA，人类的DNA在全球是没有重复的，但是大家都长着脑袋、手、脚、都能干活。。。。
这就是专业个人版软件的基本特征，那它到底有什么用呢？其实很多，权威性、张杨性。。。。。 &#160; &#160; &#160; &#160; &#160; &#160; &#160;
但在黑客软件类，它的目的就不一样了，是为了躲避杀软的查杀，因为你是唯一的，并没有人你软件的DNA 公布出去，杀软也就不知道，所以它就不认识你，不能杀你&#8230;明白了？
现在很多软件都提供这种人性化的&#8220;量身打造&#8221;，但大多数都是糊弄你玩的，为什么？因为你只要露出想买个人版的欲望时，人家就已经知道了你是个外行。会想了尽的办法忽悠你。包括现在比较流行的远控版本，有的更是打出&#8220;再加100元，免费定制个人版&#8221;或&#8220;XX元定做个人版灰鸽子&#8221;&#8230;&#8230;统统都是假的，效果要说没有，也不一定，但效果并没有你想的那么简单，我认识一个朋友，他告诉我，就是在源码生成里稍稍动动手脚就OK。
再有就是拿普通版本充当个人版的办法，就是给你提供一个更新假象，让你感觉你的待遇好，认为个人版有另外一个特殊的更新渠道，我就告诉你&#8220;屁&#8221;，实际上人家就是把普通版的简单变一下种，在你生成出来的木马里加了一种不知名的&#8220;壳&#8221;，给你加个&#8220;壳&#8221;，就这么简单，明儿里，你还耀武扬威：&#8220;我是个人版，我是特殊渠道更新，我的是世界唯一的&#8221;实际上，就是普通的&#8220;免杀壳&#8221;。 CAO死这帮WBD骗子。
除非遇到那种真正有必要的时候，否则不会那么麻烦处理这个的。你们知道修改一次源码有多费事吗？要想让这个版本世界唯一性有多费劲吗？要想让这个世界唯一性的东西出现N个供大家来买有更多费事吗？几百块钱？我是不愿意，这下你明白了？
2：徒弟、shifu=真不想探讨这个话题，就像路边算卦占卜一样，你可以了解，但别深陷其中。
敢问现在收徒的哪个不要报酬？哪个不是为了途利？当然这个世界上都这样，小学老师也得领薪水不是。但人家正了八经的老师能教你有用的东西啊，网络上流传的那些&#8220;收徒传授挂马、抓鸡、盗号、入侵&#8230;.&#8221; 。你大胆的问问他，他敢保证自己是个&#8220;手儿&#8221;不？他们跟那些专门收费帮人预测彩票中奖的有什么区别？有500万中的机会他会因为你给了他几百块钱就让给你？黑客文化孕育了数十年的技术就能在百十块钱的前提下被你学到了？那是专门糊弄你们这群TMD沙但的&#8230;你们看那些个抓鸡的视频教程，说不定是谁抓了几天、甚至几个月才找到得那么几个零子儿，拿出来骗你说&#8220;一晚抓上万肉鸡&#8221;，我靠。。。
3：XXX木马=&#8220;螳螂捕蝉黄雀在后&#8221;，这个道理你们懂吧？
木马、后门程序只适合拿来看看，新鲜一下。如果你拿来当个工具用，那你可就&#8220;彪&#8221;到家了。不过一些专业人士如果想用这些程序，肯定不会去网上DOWN那种万人骑的东西，要嘛自己开发、要嘛找人花钱写一套出来，私底下秘密使用。
木马中捆木马，当你拿这个东西区做坏事的时候，你同样也被木马中的那个木马所窥探。如果你用木马盗取了1个QQ号，那么你背后的那只黑手就盗取了2个QQ号，其中一个是你的。远程控制也一样，除非经营它的作者长着一颗&#8220;唐三藏&#8221;的心。 &#160;&#160;

黑鸽子www. heigezi. org
他与黑防不同，黑防是稳扎稳打,同样是翻版，但某些时候你的脸皮不要那么厚.，不要那么无耻.黑鸽子-纯粹就是个骗子.突然间冒出来，骗俩钱，完事马上就撤。
谁都明白，鸽子是过街老鼠-太招风。谁都不愿意用它去拉人.太费力，今天的免杀做好了-明天就被杀&#8230;灰鸽子1.2源码被公布已经很久了，相信众多的版本都是由此而来，懂编程的人都明白这里边的猫拟.黑鸽子也如此，不过也有例外，兴许背后真的是那些所谓的&#8220;葛军团队&#8221;在捣鬼，但质量差的太远了。虽然外观做的不错、功能看上去很多，扎眼一看&#8220;太T M牛了。。。但实际上，孙猴子一个跟头的距离.
我手里有一个VIP会员版，生成的服务端免杀效果特差，国内的杀软能过一半就很HAPPY了（表面），当你一问为什么这么差的时候客服就告诉你：&#8220;谁让你买会员版了，你买个人版的就好了&#8221;，我K，那以后你是不是还要叫我买XX钻石版、XX白金版&#8230;&#8230;.？谁T M不知道那所谓的个人版是怎么回事.太T M D无耻了，我实话说吧，软件不稳定，有时候自己都无法上线，一连接肉鸡就容易断开，远程命令也不怎么好使，屏幕传送不稳定，经常无响应。。。。。等等，太多了实话告诉你，只要你买了，不管多少钱，保证毁青你肠子.
黑鹰基地www.3800hk.com
如果不告诉我那是HACK站，还真看不出来.如果你进了他的VIP，就知道什么叫XXX，哎！我只能用X号来表示，因为大家都是文明人，不能说脏话。他们站的教程内容很广，但质量低，什么意思呢？就是说，黑鹰从外表看：什么都教、什么都会、什么都有&#8230;但适用的很少，讲师很烂（那个什么烂CEO），说话错字连篇、明明一个简单的意思，他要说的相当复杂（有些时候例子越举，越迷糊）不过他的软实力还是有一点点的（以量压质），有些VIP软件还是不错的，特别是抓鸡方面。不过大家不要被他的外表迷惑，看主页、 VIP，站长公开讲话，不知道的还以为这地方有多好呢&#8230;最无助的就是&#8220;黑鹰远控&#8221;，呵呵我想读者们也应该有人在用，他这个远控-不能说是一般-只能说他确实是个&#8220;软件&#8221;,免杀就不用提了，你买了就后悔.好东西有，但是轮到你手里就不是什么新鲜玩意了。怎么说呢，黑鹰的商业目地和重心偏移，有点过头了。
红黑远控www.7747.net
软件虽然功能上还不是很全，但稳定性较08年有了那么&#8220;一丁点儿&#8221;的提升.现在价钱升到90了，我感觉还行！为什么说呢？
1：价钱不贵，大家可以到处转转，看看哪一款远控（某些站公开销售VIP版）能把价钱压到100以下.&#160;有的网站是拐了弯的整你俩钱，说什么免费赠送，废话，你要是不花3-4百块钱他能免费送你吗？
2：免杀稳定，定期更新：我用了那么多远控，能够坚持不断更新到几年、免杀过国内主流的唯独红黑.是，有时候大家会发现卡巴过不去了，360过不去了。这也是正常. 你用脑袋想一想，你用的这是什么？黑客软件啊，黑客软件就会被杀的，相比其他版本来说 知足吧你！
注意问题：你们要记着，有些东西是不能轻易往软件里加的. -比如&#8220;键盘记录、远程文件删除&#8221;（起码目前来说比较渺茫）
现在是什么时候？国家相关政策如何？在政策与现实处于敏感时期，你脑袋消尖往前冲，找死嘛！软件的类别定位很难，但软件具备的某些功能可以让人很明朗的把你归类. &#160;你不具备哪些功能，你就不违法，但某一天你一旦具备了哪些功能，你就是违法。对于一个想长足发展的团体来说，不在必要时候，是不会冒这个险的. &#160;所以大家顺其自然，别着急&#8230;
缺陷：不稳定,上线速度还可以，但连接操作的延迟比较大，经常无反应（新版也一样）主机列表对应的&#8220;连接速度&#8221;不准，本地127.0.0.1时常超过300.，再就是列表那块能不能把&#8220;偏好&#8221;去掉，给人的感觉怎么，那么二呢！
警告：有些投机取巧的网友会耍点小聪明，认为自己下个免费版，然后叫其他VIP会员帮着生成&#8220;服务端&#8221;，供自己使用。难道你没发现无法上线吗？郁闷！！！
pcsharewww.pcshare.cn
大家还是把它忘了吧，或者在网上下一个脱壳破解版 -自己改，自己弄，那样能好一点.整体来说软件不错，但官方人员的大脑就有点问题了，头脑简单、四肢发达.有时间大家去看看他的站，冷清到极点了.进论坛看看，连个人影都没有.敢问声誉这么好的东西，官方怎么这么冷淡？我告诉你答案&#8230;* pcshare软件很不错，网上很多人都在用，都在自己私下做免杀.所以大家1传10-10传100.
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; 不懂行的人还以为这是pcshare官方的功劳，其实不是. 真正吧软件做大，做好的都是民间的其他人，而官方只靠这些傻乎乎的民间人给他做广告，然后自己收钱.举个例子，张三在用一款pcshare .但他用的是经过别人破解、免杀升级的.结果被李四看到了，由于李四不知情，还以为这个是官方VIP版呢，所以就会去找软件的官方买，买到手才知道哦！天呢，不是这样的.
所以从头到尾，大家都在给pcshare做各种免费广告，而他这个官方根本什么也不用做。软件也不用更新，就等着吃现成的.pcshare我现在也在用（就是在那摆着），最新版本是&#8220;20080613vip(今天是2009-11-27日，这版依然是他的VIP最新版)&#8221;.
它限制你生成次数，也就是说你每天只能生成1次服务端.每个月最多生成30次.而每天生成都被国内97%的杀软查杀，基本不存在所谓的&#8220;免杀&#8221;问题.官方的答复就是：&#8220;1-你买的是会员版、改个人版就好了。2-被会员传到杀毒网所致。&#8221;我仔细琢磨了一下，这确实是个合理的借口。但仔细想一想，敢问作为一次正确的免杀，起码要能坚持几小时。再起码你那刚更新完，我这一生成就应该是免杀的，后来被追杀那是后话，但你刚更新完，我生成后这照样杀，那还算个&#8220;鸟&#8221;更新呢？什么卡巴、江民、瑞星、NOD32、360、麦咖啡，没有一个能坚持住的.无语了，
有一次我在VIP群里侦测了一下在线会员的IP（特殊方法：说简单、也不简单、现成的工具遍地都是），发现VIPQQ群里在线会员的IP 都和管理员在同一省市、城市。我换到其他QQ群就可以探测到全国各地的IP.这TM也太假了吧.如果有会员问及免杀问题，人家管理员就告诉你，找另外一个群友，交钱给你免杀.K~~~我T M花钱买了VIP，不但不免杀（过得去也行啊），还要另外花钱去做免杀..那我还不如在网上随便下载个玩得了.
上兴远控www.98exe.com
还是一样，想玩的朋友。去下载个免费、破解版，然后自己学着做免杀.如果不会做，你就别玩&#8230;我是为你好，花了钱什么都得不到，那你可就爽了.怎么说呢，上兴远控我感觉从远控技术角度来说，他仅次于灰鸽子（原版）。但现在上兴官方也不怎么更新了，我手里是2009 VIP的.可能是人家钱赚够了吧&#8230;..更新时间不稳定，效果不好，有时候很长时间更新一次，客服态度蛮横、什么都不管。杀软主动除了金山，其他的都过不了.（我测试只能过金山）2009版其实就是把前年的版改了下名字、换个主题而已，不信你们懂免杀、脱壳的研究一下就明白了（细节地方比一下,完全一样,生成大小不一样那是作弊做出来的）所以对于上兴远控，不建议购买。
其他&#8220;XXX版鸽子&#8221;&#160;
其他版本灰鸽子大多数都是2007黑防版&#8211;改下名称、换张图片、调下启动窗口。很多网站、论坛都这么干，然后做个免杀就充当自己的VIP专版.都是骗小孩子的。
再有就是&#8220;山寨版&#8221;灰鸽子，什么意思呢，就是仿造。PS张好看的启动画面，然后换个主题。用现在比较流行的语言、工具来写一套类似的软件。部分版本从表面上看难辨真假，但用起来性能上感觉根本不是一个档次。意思就是说，照着灰鸽子的样儿，重新编译一款一模一样远程控制，这种东西，只能看不能用，因为根本就是垃圾. 2009版的冒牌货都比不上2005原版鸽子稳定。
总结语：
对任何站点、被别人说的再好不过的软件都不要抱太大的希望。比如：我加入VIP快1年了，怎么还不会入侵、盗号、远控、编程&#8230;&#8230;.？？？其实这种东西不是靠花那么百十块钱就能学到的，敢问一个整天在学校、有老师教的地方你都学不会何况网络了.就花那么俩个钱，买个VIP，就能学到本事了？好好想想吧&#8230;..不过话说回来，如果你就是想玩，想接触这个领域、甚至说就想单纯的会那么一点儿&#8230;花点钱，买个VIP，看个教程也够了。不过一定要去在档次上过得去的站，起码每天都有教程看、起码在群、论坛里发个帖子能有人回的地方。黑基、红黑、黑鹰都可以。
至于远控-花点小钱百十元左右买个玩玩，即使被杀了也属正常。就是别抱太大期望. 另外我给你们讲一个道理：你把钱存在某银行，突然有一天银行的工作人员告诉你，你存在银行里的钱被盗了,原因是你没购买他们提供的&#8220;个人版金库&#8221;，所以就丢了。你说？你是怎么想的？目前就这么多&#8230;&#8230;&#8230;&#8230;&#8230;大家如果觉得有理，回个贴、奉上那么1个豆豆，我就开心了，太开心了&#8230;&#8230;&#8230;.
&#160;
&#160;
BTW： 脱壳免杀制作工具 MYCCL + OD + C32
]]></description>
			<content:encoded><![CDATA[<p>以下为转贴内容</p>
<hr />
<p>
	如果你认为此贴还没有背弃广大网友.就回个帖，也算是对我的支持~！~本人平时没什么爱好，就喜欢玩远控，虽然不懂编程、但随着时间流逝小问题还是可以应付的，我把心德跟大家分享下，就算是给新手们个建议吧.</p>
<p>这几年手里暂了不少远控，大多都是收费的，从最早的灰鸽子，到现在的红黑远控(前身红黑)。每一个牌子、版本都有用，到目前为止，相信我们菜鸟中能用到我这么全的，真没几个.我以下举例6种，相信在互联网能拿得出手的也就这几个，什么GH0ST、IS、、、等等都拿不行.其他版本的，大家就不要去想了，要嘛残次品、要嘛挂羊头卖狗肉.远控这个东西你不能看他什么时候出现的。有的人认为新出来的东西就是好的，&ldquo;错&rdquo;-或者说&ldquo;不一定&rdquo;，那要看在什么前提下出现的.当然，我举这几个例子里也有假的（后话谈）&#8230;</p>
<p><span id="more-540"></span></p>
<p>这里我给大家举几个网上流传已久的有关软件形容词，叫他&ldquo;形容词&rdquo;也好，叫他&ldquo;专业术语&rdquo;也行，反正就是为了笼统一点，能让大家明白。</p>
<h2>1：专业个人版=什么叫专业个人版？</h2>
<p>意思就是说某一款软件在这个世界上它的软件源码内部特征是全球唯一的。</p>
<p>打个比喻，人类的DNA，人类的DNA在全球是没有重复的，但是大家都长着脑袋、手、脚、都能干活。。。。</p>
<p>这就是专业个人版软件的基本特征，那它到底有什么用呢？其实很多，权威性、张杨性。。。。。 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>但在黑客软件类，它的目的就不一样了，是为了躲避杀软的查杀，因为你是唯一的，并没有人你软件的DNA 公布出去，杀软也就不知道，所以它就不认识你，不能杀你&hellip;明白了？</p>
<p>现在很多软件都提供这种人性化的&ldquo;量身打造&rdquo;，但大多数都是糊弄你玩的，为什么？因为你只要露出想买个人版的欲望时，人家就已经知道了你是个外行。会想了尽的办法忽悠你。包括现在比较流行的远控版本，有的更是打出&ldquo;再加100元，免费定制个人版&rdquo;或&ldquo;XX元定做个人版灰鸽子&rdquo;&hellip;&hellip;统统都是假的，效果要说没有，也不一定，但效果并没有你想的那么简单，我认识一个朋友，他告诉我，就是在源码生成里稍稍动动手脚就OK。</p>
<p>再有就是拿普通版本充当个人版的办法，就是给你提供一个更新假象，让你感觉你的待遇好，认为个人版有另外一个特殊的更新渠道，我就告诉你&ldquo;屁&rdquo;，实际上人家就是把普通版的简单变一下种，在你生成出来的木马里加了一种不知名的&ldquo;壳&rdquo;，给你加个&ldquo;壳&rdquo;，就这么简单，明儿里，你还耀武扬威：&ldquo;我是个人版，我是特殊渠道更新，我的是世界唯一的&rdquo;实际上，就是普通的&ldquo;免杀壳&rdquo;。 CAO死这帮WBD骗子。</p>
<p>除非遇到那种真正有必要的时候，否则不会那么麻烦处理这个的。你们知道修改一次源码有多费事吗？要想让这个版本世界唯一性有多费劲吗？要想让这个世界唯一性的东西出现N个供大家来买有更多费事吗？几百块钱？我是不愿意，这下你明白了？</p>
<h2>2：徒弟、shifu=真不想探讨这个话题，就像路边算卦占卜一样，你可以了解，但别深陷其中。</h2>
<p>敢问现在收徒的哪个不要报酬？哪个不是为了途利？当然这个世界上都这样，小学老师也得领薪水不是。但人家正了八经的老师能教你有用的东西啊，网络上流传的那些&ldquo;收徒传授挂马、抓鸡、盗号、入侵&hellip;.&rdquo; 。你大胆的问问他，他敢保证自己是个&ldquo;手儿&rdquo;不？他们跟那些专门收费帮人预测彩票中奖的有什么区别？有500万中的机会他会因为你给了他几百块钱就让给你？黑客文化孕育了数十年的技术就能在百十块钱的前提下被你学到了？那是专门糊弄你们这群TMD沙但的&hellip;你们看那些个抓鸡的视频教程，说不定是谁抓了几天、甚至几个月才找到得那么几个零子儿，拿出来骗你说&ldquo;一晚抓上万肉鸡&rdquo;，我靠。。。</p>
<h2>3：XXX木马=&ldquo;螳螂捕蝉黄雀在后&rdquo;，这个道理你们懂吧？</h2>
<p>木马、后门程序只适合拿来看看，新鲜一下。如果你拿来当个工具用，那你可就&ldquo;彪&rdquo;到家了。不过一些专业人士如果想用这些程序，肯定不会去网上DOWN那种万人骑的东西，要嘛自己开发、要嘛找人花钱写一套出来，私底下秘密使用。</p>
<p>木马中捆木马，当你拿这个东西区做坏事的时候，你同样也被木马中的那个木马所窥探。如果你用木马盗取了1个QQ号，那么你背后的那只黑手就盗取了2个QQ号，其中一个是你的。远程控制也一样，除非经营它的作者长着一颗&ldquo;唐三藏&rdquo;的心。 &nbsp;&nbsp;</p>
<hr />
<h2>黑鸽子www. heigezi. org</h2>
<p>他与黑防不同，黑防是稳扎稳打,同样是翻版，但某些时候你的脸皮不要那么厚.，不要那么无耻.黑鸽子-纯粹就是个骗子.突然间冒出来，骗俩钱，完事马上就撤。</p>
<p>谁都明白，鸽子是过街老鼠-太招风。谁都不愿意用它去拉人.太费力，今天的免杀做好了-明天就被杀&#8230;灰鸽子1.2源码被公布已经很久了，相信众多的版本都是由此而来，懂编程的人都明白这里边的猫拟.黑鸽子也如此，不过也有例外，兴许背后真的是那些所谓的&ldquo;葛军团队&rdquo;在捣鬼，但质量差的太远了。虽然外观做的不错、功能看上去很多，扎眼一看&ldquo;太T M牛了。。。但实际上，孙猴子一个跟头的距离.</p>
<p>我手里有一个VIP会员版，生成的服务端免杀效果特差，国内的杀软能过一半就很HAPPY了（表面），当你一问为什么这么差的时候客服就告诉你：&ldquo;谁让你买会员版了，你买个人版的就好了&rdquo;，我K，那以后你是不是还要叫我买XX钻石版、XX白金版&#8230;&#8230;.？谁T M不知道那所谓的个人版是怎么回事.太T M D无耻了，我实话说吧，软件不稳定，有时候自己都无法上线，一连接肉鸡就容易断开，远程命令也不怎么好使，屏幕传送不稳定，经常无响应。。。。。等等，太多了实话告诉你，只要你买了，不管多少钱，保证毁青你肠子.</p>
<h2>黑鹰基地www.3800hk.com</h2>
<p>如果不告诉我那是HACK站，还真看不出来.如果你进了他的VIP，就知道什么叫XXX，哎！我只能用X号来表示，因为大家都是文明人，不能说脏话。他们站的教程内容很广，但质量低，什么意思呢？就是说，黑鹰从外表看：什么都教、什么都会、什么都有&#8230;但适用的很少，讲师很烂（那个什么烂CEO），说话错字连篇、明明一个简单的意思，他要说的相当复杂（有些时候例子越举，越迷糊）不过他的软实力还是有一点点的（以量压质），有些VIP软件还是不错的，特别是抓鸡方面。不过大家不要被他的外表迷惑，看主页、 VIP，站长公开讲话，不知道的还以为这地方有多好呢&#8230;最无助的就是&ldquo;黑鹰远控&rdquo;，呵呵我想读者们也应该有人在用，他这个远控-不能说是一般-只能说他确实是个&ldquo;软件&rdquo;,免杀就不用提了，你买了就后悔.好东西有，但是轮到你手里就不是什么新鲜玩意了。怎么说呢，黑鹰的商业目地和重心偏移，有点过头了。</p>
<h2>红黑远控www.7747.net</h2>
<p>软件虽然功能上还不是很全，但稳定性较08年有了那么&ldquo;一丁点儿&rdquo;的提升.现在价钱升到90了，我感觉还行！为什么说呢？</p>
<p>1：价钱不贵，大家可以到处转转，看看哪一款远控（某些站公开销售VIP版）能把价钱压到100以下.&nbsp;有的网站是拐了弯的整你俩钱，说什么免费赠送，废话，你要是不花3-4百块钱他能免费送你吗？</p>
<p>2：免杀稳定，定期更新：我用了那么多远控，能够坚持不断更新到几年、免杀过国内主流的唯独红黑.是，有时候大家会发现卡巴过不去了，360过不去了。这也是正常. 你用脑袋想一想，你用的这是什么？黑客软件啊，黑客软件就会被杀的，相比其他版本来说 知足吧你！</p>
<p>注意问题：你们要记着，有些东西是不能轻易往软件里加的. -比如&ldquo;键盘记录、远程文件删除&rdquo;（起码目前来说比较渺茫）</p>
<p>现在是什么时候？国家相关政策如何？在政策与现实处于敏感时期，你脑袋消尖往前冲，找死嘛！软件的类别定位很难，但软件具备的某些功能可以让人很明朗的把你归类. &nbsp;你不具备哪些功能，你就不违法，但某一天你一旦具备了哪些功能，你就是违法。对于一个想长足发展的团体来说，不在必要时候，是不会冒这个险的. &nbsp;所以大家顺其自然，别着急&#8230;</p>
<p>缺陷：不稳定,上线速度还可以，但连接操作的延迟比较大，经常无反应（新版也一样）主机列表对应的&ldquo;连接速度&rdquo;不准，本地127.0.0.1时常超过300.，再就是列表那块能不能把&ldquo;偏好&rdquo;去掉，给人的感觉怎么，那么二呢！</p>
<p>警告：有些投机取巧的网友会耍点小聪明，认为自己下个免费版，然后叫其他VIP会员帮着生成&ldquo;服务端&rdquo;，供自己使用。难道你没发现无法上线吗？郁闷！！！</p>
<h2>pcsharewww.pcshare.cn</h2>
<p>大家还是把它忘了吧，或者在网上下一个脱壳破解版 -自己改，自己弄，那样能好一点.整体来说软件不错，但官方人员的大脑就有点问题了，头脑简单、四肢发达.有时间大家去看看他的站，冷清到极点了.进论坛看看，连个人影都没有.敢问声誉这么好的东西，官方怎么这么冷淡？我告诉你答案&#8230;* pcshare软件很不错，网上很多人都在用，都在自己私下做免杀.所以大家1传10-10传100.</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 不懂行的人还以为这是pcshare官方的功劳，其实不是. 真正吧软件做大，做好的都是民间的其他人，而官方只靠这些傻乎乎的民间人给他做广告，然后自己收钱.举个例子，张三在用一款pcshare .但他用的是经过别人破解、免杀升级的.结果被李四看到了，由于李四不知情，还以为这个是官方VIP版呢，所以就会去找软件的官方买，买到手才知道哦！天呢，不是这样的.</p>
<p>所以从头到尾，大家都在给pcshare做各种免费广告，而他这个官方根本什么也不用做。软件也不用更新，就等着吃现成的.pcshare我现在也在用（就是在那摆着），最新版本是&ldquo;20080613vip(今天是2009-11-27日，这版依然是他的VIP最新版)&rdquo;.</p>
<p>它限制你生成次数，也就是说你每天只能生成1次服务端.每个月最多生成30次.而每天生成都被国内97%的杀软查杀，基本不存在所谓的&ldquo;免杀&rdquo;问题.官方的答复就是：&ldquo;1-你买的是会员版、改个人版就好了。2-被会员传到杀毒网所致。&rdquo;我仔细琢磨了一下，这确实是个合理的借口。但仔细想一想，敢问作为一次正确的免杀，起码要能坚持几小时。再起码你那刚更新完，我这一生成就应该是免杀的，后来被追杀那是后话，但你刚更新完，我生成后这照样杀，那还算个&ldquo;鸟&rdquo;更新呢？什么卡巴、江民、瑞星、NOD32、360、麦咖啡，没有一个能坚持住的.无语了，</p>
<p>有一次我在VIP群里侦测了一下在线会员的IP（特殊方法：说简单、也不简单、现成的工具遍地都是），发现VIPQQ群里在线会员的IP 都和管理员在同一省市、城市。我换到其他QQ群就可以探测到全国各地的IP.这TM也太假了吧.如果有会员问及免杀问题，人家管理员就告诉你，找另外一个群友，交钱给你免杀.K~~~我T M花钱买了VIP，不但不免杀（过得去也行啊），还要另外花钱去做免杀..那我还不如在网上随便下载个玩得了.</p>
<h2>上兴远控www.98exe.com</h2>
<p>还是一样，想玩的朋友。去下载个免费、破解版，然后自己学着做免杀.如果不会做，你就别玩&#8230;我是为你好，花了钱什么都得不到，那你可就爽了.怎么说呢，上兴远控我感觉从远控技术角度来说，他仅次于灰鸽子（原版）。但现在上兴官方也不怎么更新了，我手里是2009 VIP的.可能是人家钱赚够了吧&#8230;..更新时间不稳定，效果不好，有时候很长时间更新一次，客服态度蛮横、什么都不管。杀软主动除了金山，其他的都过不了.（我测试只能过金山）2009版其实就是把前年的版改了下名字、换个主题而已，不信你们懂免杀、脱壳的研究一下就明白了（细节地方比一下,完全一样,生成大小不一样那是作弊做出来的）所以对于上兴远控，不建议购买。</p>
<h2>其他&ldquo;XXX版鸽子&rdquo;&nbsp;</h2>
<p>其他版本灰鸽子大多数都是2007黑防版&#8211;改下名称、换张图片、调下启动窗口。很多网站、论坛都这么干，然后做个免杀就充当自己的VIP专版.都是骗小孩子的。</p>
<p>再有就是&ldquo;山寨版&rdquo;灰鸽子，什么意思呢，就是仿造。PS张好看的启动画面，然后换个主题。用现在比较流行的语言、工具来写一套类似的软件。部分版本从表面上看难辨真假，但用起来性能上感觉根本不是一个档次。意思就是说，照着灰鸽子的样儿，重新编译一款一模一样远程控制，这种东西，只能看不能用，因为根本就是垃圾. 2009版的冒牌货都比不上2005原版鸽子稳定。</p>
<h2>总结语：</h2>
<p>对任何站点、被别人说的再好不过的软件都不要抱太大的希望。比如：我加入VIP快1年了，怎么还不会入侵、盗号、远控、编程&#8230;&#8230;.？？？其实这种东西不是靠花那么百十块钱就能学到的，敢问一个整天在学校、有老师教的地方你都学不会何况网络了.就花那么俩个钱，买个VIP，就能学到本事了？好好想想吧&#8230;..不过话说回来，如果你就是想玩，想接触这个领域、甚至说就想单纯的会那么一点儿&#8230;花点钱，买个VIP，看个教程也够了。不过一定要去在档次上过得去的站，起码每天都有教程看、起码在群、论坛里发个帖子能有人回的地方。黑基、红黑、黑鹰都可以。</p>
<p>至于远控-花点小钱百十元左右买个玩玩，即使被杀了也属正常。就是别抱太大期望. 另外我给你们讲一个道理：你把钱存在某银行，突然有一天银行的工作人员告诉你，你存在银行里的钱被盗了,原因是你没购买他们提供的&ldquo;个人版金库&rdquo;，所以就丢了。你说？你是怎么想的？目前就这么多&#8230;&#8230;&#8230;&#8230;&#8230;大家如果觉得有理，回个贴、奉上那么1个豆豆，我就开心了，太开心了&#8230;&#8230;&#8230;.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre>BTW： 脱壳免杀制作工具 MYCCL + OD + C32</pre>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/540/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>服务器上的Raid性能测试</title>
		<link>http://lee.kometo.com/archives/536</link>
		<comments>http://lee.kometo.com/archives/536#comments</comments>
		<pubDate>Sun, 07 Mar 2010 08:15:12 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[IT前沿]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=536</guid>
		<description><![CDATA[测试了一组服务器的Raid性能
初步结论：
读取性能 &#160; &#160;Raid0 &#62; Raid5 &#62;&#62; NoRaid &#62; Raid 1
写入性能 &#160; &#160;NoRaid &#62;&#62; Raid0 &#62;&#62; Raid1 &#62; Raid0
测试服务器均是HP DL 380 ，Smary Array 5，没有写缓存

&#160;
下载：Kometo&#39;s Raid Testing
]]></description>
			<content:encoded><![CDATA[<p>测试了一组服务器的Raid性能</p>
<p>初步结论：</p>
<p>读取性能 &nbsp; &nbsp;Raid0 &gt; Raid5 &gt;&gt; NoRaid &gt; Raid 1</p>
<p>写入性能 &nbsp; &nbsp;NoRaid &gt;&gt; Raid0 &gt;&gt; Raid1 &gt; Raid0</p>
<p>测试服务器均是HP DL 380 ，Smary Array 5，没有写缓存</p>
<p><a href="http://lee.kometo.com/wp-content/uploads/2010/03/Raid-Test.png"><img alt="" class="aligncenter size-full wp-image-537" height="789" src="http://lee.kometo.com/wp-content/uploads/2010/03/Raid-Test.png" title="Raid Test" width="622" /></a></p>
<p>&nbsp;</p>
<p>下载：<a href="http://lee.kometo.com/wp-content/uploads/2010/03/Kometos-Raid-Testing.pdf">Kometo&#39;s Raid Testing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/536/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RouterOS ROS的策略路由表的意外故障</title>
		<link>http://lee.kometo.com/archives/526</link>
		<comments>http://lee.kometo.com/archives/526#comments</comments>
		<pubDate>Fri, 05 Mar 2010 16:27:29 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[IT前沿]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=526</guid>
		<description><![CDATA[使用ROS配置策略路由是遇到一个奇怪的现象，我本来是想配置电信和网通的分流的，分别有一条专线。
电信为默认路由，使用mangle 添加 Routing Mark 的方式来配置路由选择，AL.CNC是一个下载的网通地址表
 chain=prerouting action=mark-routing new-routing-mark=R.CNC
 passthrough=yes dst-address-list=AL.CNC

然后建立策略路由表，如下，看着比较多行，其实主要相关的是行号1：
 0 A S  0.0.0.0/0                          reachable     58.57.XXX.XX          [...]]]></description>
			<content:encoded><![CDATA[<p>使用ROS配置策略路由是遇到一个奇怪的现象，我本来是想配置电信和网通的分流的，分别有一条专线。</p>
<p>电信为默认路由，使用mangle 添加 Routing Mark 的方式来配置路由选择，AL.CNC是一个下载的网通地址表</p>
<pre class="brush:text"> chain=prerouting action=mark-routing new-routing-mark=R.CNC
 passthrough=yes dst-address-list=AL.CNC
</pre>
<p>然后建立策略路由表，如下，看着比较多行，其实主要相关的是行号1：</p>
<pre class="brush:text"> 0 A S  0.0.0.0/0                          reachable     58.57.XXX.XX                       1        E.WAN.CTC[V3003]
 ; routing mark - R.CNC
 1 A S  0.0.0.0/0                          reachable     218.56.XXX.XX                      1        E.WAN.CNC[V3001]
 2 A S  10.0.0.0/8                         reachable     10.5.159.189                       1        E.LAN.OF
 3 ADC  10.5.159.188/30    10.5.159.190                                                     0        E.LAN.OF
 4 ADC  58.57.XX.XXX/30    58.57.XX.XXX                                                     0        E.WAN.CTC[V3003]
 7 ADC  192.168.68.0/24    192.168.68.1                                                     0        E.LAN.HOME#1[V1001]
 8 ADC  218.56.XXX.XX/30   218.56.XXX.XX                                                    0        E.WAN.CNC[V3001]
</pre>
<p>按照正常完成上面的配置后遇到一个奇怪的现象：</p>
<p>客户端无法Ping通网通段的IP地址，当然其它对网通地址段的访问也都不通，然后反复排查，查资料，头痛&#8230;..</p>
<p>中间发现：如果在R.CNC路由表中添加客户端的路由后客户端就可以正常访问了，但这不应该是解决问题的根本方法，有些连接路由或动态路由是无法手动处理的。</p>
<p>然后又尝试很多种处理方式，和可能出问题的地方，头真的很痛。。。</p>
<p>直接说原因吧：</p>
<p><strong>上述配置中使用的AL.CNC地址表中包含了我的网通接口地址，（按情理来说当然应该包含的，我的网通接口地址当然在网通IP地址表范围内）<br />
	</strong></p>
<p><strong>但是造成问题的原因就在这里，只要从地址表中去掉我的网通接口地址，一切就都正常了，可以直接修改AL.CNC地址表，也可以简单修改mangle排除掉接口地址，像这样：<br />
	</strong></p>
<pre class="brush:text">chain=prerouting action=mark-routing new-routing-mark=R.CNC passthrough=yes
dst-address=!218.56.XXX.XX dst-address-list=AL.CNC
</pre>
<p><strong>?仍然存在的疑问?</strong></p>
<p>这种情况应该在配置网通电信策略路由时经常遇到，但在问题排查过程中，没有从网络上看到类似的讨论！为什么？</p>
<p>这种意外情况是ROS设计的本意还是它的一个BUG？我使用的版本是4.22</p>
<p>我真的找到了问题的根源了吗？</p>
<h3 style="color: blue;">BTW</h3>
<p>发现，当配置好网通、电信自动路由选择后，线路负载分配很大程度上受DNS设定影响，当使用网通的DNS服务器是，大部分访问会解析到网通的服务器上，电信的也同理。</p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/526/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>仿宋 GB2321 和 楷体 GB2321</title>
		<link>http://lee.kometo.com/archives/519</link>
		<comments>http://lee.kometo.com/archives/519#comments</comments>
		<pubDate>Thu, 25 Feb 2010 02:10:32 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[简单生活]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=519</guid>
		<description><![CDATA[在Windows XP系统下，默认安装的字体是：仿宋 GB2321 和 楷体 GB2321
到了Vista 和 Windows 7，系统默认安装的字体是 仿宋 和 楷体 ，这两个实际上是支持 Unicode的字体
这样就给我们排版带来了兼容性问题：
&#160;&#160;&#160;&#160;所有以前在XP下排版的文件，指定使用的仿宋 GB2321 和 楷体 GB2321和字体，到Vista和Win7下都变成了微软雅虎。
&#160;&#160; &#160;同样所有在Vista和Win7下排版指定的仿宋和楷体到XP下又变成了宋体。
原因就是字体的缺失，知道原因，解决起来也就简单了，比较通行的方法是在Vista和Win7下安装仿宋 GB2321 和 楷体 GB2321两种字体，你可以从XP系统下自己拷贝，或者使用文后的下载。
&#160;&#160; &#160;随便提一下按有关国家公文规定，通常正文使用仿宋，附件使用楷体
下载：仿宋 GB2321 和 楷体 GB2321
]]></description>
			<content:encoded><![CDATA[<p>在Windows XP系统下，默认安装的字体是：仿宋 GB2321 和 楷体 GB2321</p>
<p>到了Vista 和 Windows 7，系统默认安装的字体是 仿宋 和 楷体 ，这两个实际上是支持 Unicode的字体</p>
<p>这样就给我们排版带来了兼容性问题：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;所有以前在XP下排版的文件，指定使用的仿宋 GB2321 和 楷体 GB2321和字体，到Vista和Win7下都变成了微软雅虎。</p>
<p>&nbsp;&nbsp; &nbsp;同样所有在Vista和Win7下排版指定的仿宋和楷体到XP下又变成了宋体。</p>
<p>原因就是字体的缺失，知道原因，解决起来也就简单了，比较通行的方法是在Vista和Win7下安装仿宋 GB2321 和 楷体 GB2321两种字体，你可以从XP系统下自己拷贝，或者使用文后的下载。</p>
<p>&nbsp;&nbsp; &nbsp;随便提一下按有关国家公文规定，通常正文使用仿宋，附件使用楷体</p>
<p>下载：<a href="http://lee.kometo.com/wp-content/uploads/2010/02/仿宋-GB2321-和-楷体-GB2321.zip">仿宋 GB2321 和 楷体 GB2321</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/519/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenTTD 简要设置</title>
		<link>http://lee.kometo.com/archives/517</link>
		<comments>http://lee.kometo.com/archives/517#comments</comments>
		<pubDate>Wed, 24 Feb 2010 09:45:34 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[简单生活]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=517</guid>
		<description><![CDATA[环境：Open TTD 1.0 RC1
1. 需要手动下载 openGFX open SFX
2.配置文件 openttd.cfg默认创建在用户目录，可以复制到TTD的运行目录，然后 OPENTTD就会忽略用户目录的文件和设置了，在U盘和多机共享游戏目录时特别有用
3.字体设置，OpenTTD不能直接使用中文字体名，所以必须是用文件名来指定字体，推荐把字体文件复制到OpenTTD的运行目录，然后编辑CFG文件

A;复制微软雅黑字体文件到游戏目录
B 编辑CFG文件，如下：
&#160;
small_font = msyh.ttf
medium_font = msyh.ttf
large_font = msyhbd.ttf
small_size = 12
medium_size = 14
large_size = 18
small_aa = 1
medium_aa = 1
large_aa = 1

]]></description>
			<content:encoded><![CDATA[<p>环境：Open TTD 1.0 RC1</p>
<p>1. 需要手动下载 openGFX open SFX</p>
<p>2.配置文件 openttd.cfg默认创建在用户目录，可以复制到TTD的运行目录，然后 OPENTTD就会忽略用户目录的文件和设置了，在U盘和多机共享游戏目录时特别有用</p>
<p>3.字体设置，OpenTTD不能直接使用中文字体名，所以必须是用文件名来指定字体，推荐把字体文件复制到OpenTTD的运行目录，然后编辑CFG文件</p>
<blockquote>
<p>A;复制微软雅黑字体文件到游戏目录</p>
<p>B 编辑CFG文件，如下：</p>
<p>&nbsp;</p>
<p>small_font = msyh.ttf</p>
<p>medium_font = msyh.ttf</p>
<p>large_font = msyhbd.ttf</p>
<p>small_size = 12</p>
<p>medium_size = 14</p>
<p>large_size = 18</p>
<p>small_aa = 1</p>
<p>medium_aa = 1</p>
<p>large_aa = 1</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/517/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CANON EOS 7D 学习笔记</title>
		<link>http://lee.kometo.com/archives/511</link>
		<comments>http://lee.kometo.com/archives/511#comments</comments>
		<pubDate>Sun, 31 Jan 2010 13:06:06 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[简单生活]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=511</guid>
		<description><![CDATA[关于闪光灯

默认情况下闪光灯的控制方式是：E-TTL II，TTL的意思是（Through The Lens 通过镜头），既闪光灯测光是通过镜头来测量的。
E-TTL，当快门释放的一瞬间，闪光灯会发出一束预闪光，用来监测环境光和计算所需的闪光量，然后闪光灯发出正确的闪光量
闪光量的计算是不受曝光补偿控制的，它总是通过某种算法计算，试图使曝光主体获得正确的曝光，唯一控制闪光量的方法是指定闪光补偿。也就是说不管你怎么控制曝光量（手动，曝光补偿负值），闪光灯总是试图是曝光主体获得正确的曝光
但是使用P模式或是自动模式，拍摄光线又比较暗时，相机默认使用最大光圈，1/60的快门，ISO400的曝光设置，然后点亮闪光灯，主体曝光的控制实际是由闪光灯控制了。如果光线环境比较亮，相机可能会使用较快的曝光设定，而闪光灯同样会点亮，以进行主体曝光的检测。
原则上使用闪光灯时：根据背景进行曝光设定，通过手动、或者自动EV锁，注意打开闪光灯开关后，自动曝光锁可能不能正确工作；然后用闪光灯来对主体进行补偿曝光，这时，闪光曝光锁就特别有用。

]]></description>
			<content:encoded><![CDATA[<h3>关于闪光灯</h3>
<ul>
<li>默认情况下闪光灯的控制方式是：E-TTL II，TTL的意思是（Through The Lens 通过镜头），既闪光灯测光是通过镜头来测量的。</li>
<li>E-TTL，当快门释放的一瞬间，闪光灯会发出一束预闪光，用来监测环境光和计算所需的闪光量，然后闪光灯发出正确的闪光量</li>
<li>闪光量的计算是不受曝光补偿控制的，它总是通过某种算法计算，试图使曝光主体获得正确的曝光，唯一控制闪光量的方法是指定闪光补偿。也就是说不管你怎么控制曝光量（手动，曝光补偿负值），闪光灯总是试图是曝光主体获得正确的曝光</li>
<li>但是使用P模式或是自动模式，拍摄光线又比较暗时，相机默认使用最大光圈，1/60的快门，ISO400的曝光设置，然后点亮闪光灯，主体曝光的控制实际是由闪光灯控制了。如果光线环境比较亮，相机可能会使用较快的曝光设定，而闪光灯同样会点亮，以进行主体曝光的检测。</li>
<li>原则上使用闪光灯时：根据背景进行曝光设定，通过手动、或者自动EV锁，注意打开闪光灯开关后，自动曝光锁可能不能正确工作；然后用闪光灯来对主体进行补偿曝光，这时，闪光曝光锁就特别有用。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/511/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>美的东西确实会很容易让人傻的，而且也会让不了解她的人感到恐惧，魔兽世界就是个狐狸精。</title>
		<link>http://lee.kometo.com/archives/504</link>
		<comments>http://lee.kometo.com/archives/504#comments</comments>
		<pubDate>Tue, 26 Jan 2010 08:04:33 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[简单生活]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=504</guid>
		<description><![CDATA[&#160;
读《阿凡达》&#160;需要向魔兽世界敬礼之评论有感：
为什么会有这么多人对WOW反应如此强烈呢，一夸WOW，就有人说2，还有人叫喊着要禁，真是疯狂的莫名其妙，游戏而已。
&#160;
我部分同意博主的观点，西方魔幻史我不能说很熟，但西方魔幻游戏史我是绝对熟，我是从使用5英寸软盘看书玩游戏的，到现在为止，单机游戏叫的响的基本都摸过，网游到没完几个。WOW从公测开始玩，不过现在已经有1年多没玩了，主要是没时间。
&#160;
我说WOW绝对是经典，是里程碑，当然不是起源，毕竟年龄再哪里了。
&#160;
反到是那些说玩WOW玩傻的人，你们叫嚣着别人不了解魔幻史，那么你们了解WOW吗？美的东西确实会很容易让人傻的，而且也会让不了解她的人感到恐惧，WOW就是个狐狸精。
]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><b id="t_5927654e0100giwj">读<a href="http://blog.sina.com.cn/s/blog_5927654e0100giwj.html?tj=1#comment4" target="_blank">《阿凡达》&nbsp;需要向魔兽世界敬礼</a>之评论有感：</b></p>
<p>为什么会有这么多人对WOW反应如此强烈呢，一夸WOW，就有人说2，还有人叫喊着要禁，真是疯狂的莫名其妙，游戏而已。</p>
<p>&nbsp;</p>
<p>我部分同意博主的观点，西方魔幻史我不能说很熟，但西方魔幻游戏史我是绝对熟，我是从使用5英寸软盘看书玩游戏的，到现在为止，单机游戏叫的响的基本都摸过，网游到没完几个。WOW从公测开始玩，不过现在已经有1年多没玩了，主要是没时间。</p>
<p>&nbsp;</p>
<p>我说WOW绝对是经典，是里程碑，当然不是起源，毕竟年龄再哪里了。</p>
<p>&nbsp;</p>
<p>反到是那些说玩WOW玩傻的人，你们叫嚣着别人不了解魔幻史，那么你们了解WOW吗？美的东西确实会很容易让人傻的，而且也会让不了解她的人感到恐惧，WOW就是个狐狸精。</p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/504/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript中的this详解</title>
		<link>http://lee.kometo.com/archives/483</link>
		<comments>http://lee.kometo.com/archives/483#comments</comments>
		<pubDate>Mon, 14 Dec 2009 09:29:19 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[WEB应用开发]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=483</guid>
		<description><![CDATA[*本文代码中使用的 function dump(v,title), 是一个自己写的输出变量描述的函数。
如果你准备在JavaScript中写类，那么你必需对关键字 this 的使用有深刻的理解：
这是JavaScript手册中对 this的简单解释：

this:指当前对象。
对于 JScript 的客户版本，如果在其他所有对象的上下文之外使用 this，则它指的是 window 对象。

在全局环境下的 this
	
通常我们认为，Javascript 不在任何函数，不在任何类中，直接书写运行的代码的环境，称为直接运行环境，或者全局环境。实际上这个环境并不是一个真正意义上全局环境,
运行下面的代码：
dump(this,&#39;Global This&#39;);
我们可以得到输出结果：



■ Global This: object &#8211; [object Window]
[The window Object]


可以看到，在这个环境下，this 等于 浏览器的原生对象 window ,它是原生类 Window 的实例。
事实上，当我们在浏览器中运行JavaScript代码时，windows 是所有代码的根节点，所有的代码都是存储并挂接于这个节点的，当然多窗口的环境下会有多个window对象。
function Car(){

}
dump(Car);
dump(window.Car);
输出结果：


■ function function Car() {&#160; &#8230;


■ function function Car() { &#8230;


可以看到 Car 和 window.Car 是完全相同的东西
在类中使用 this
	
现在我们来看看当使用类的时候，this会发生什么样的变化。下面是一段典型的类定义代码，我们来逐步分析：
function Car(color,doors){
    //用构造模式定义属性
    this.color [...]]]></description>
			<content:encoded><![CDATA[<p><em>*本文代码中使用的 function dump(v,title), 是一个自己写的输出变量描述的函数。</em></p>
<p>如果你准备在JavaScript中写类，那么你必需对关键字 this 的使用有深刻的理解：</p>
<p>这是JavaScript手册中对 this的简单解释：</p>
<blockquote>
<p><strong>this</strong>:指当前对象。</p>
<p>对于 JScript 的客户版本，如果在其他所有对象的上下文之外使用 <b>this</b>，则它指的是 <b>window</b> 对象。</p>
</blockquote>
<h3><span id="more-483"></span><strong>在全局环境下的 this<br />
	</strong></h3>
<p>通常我们认为，Javascript 不在任何函数，不在任何类中，直接书写运行的代码的环境，称为直接运行环境，或者全局环境。实际上这个环境并不是一个真正意义上全局环境,</p>
<p>运行下面的代码：</p>
<pre class="brush:jscript">dump(this,&#39;Global This&#39;);</pre>
<p>我们可以得到输出结果：</p>
<div>
<div style="color: blue;">
<blockquote>
<p><strong>■ <span style="color: red;">Global This:</span> object</strong> &#8211; [object Window]</p>
<div style="padding: 2px 3em; color: green;">[The window Object]</div>
</blockquote></div>
</div>
<p>可以看到，在这个环境下，this 等于 浏览器的原生对象 <strong>window </strong>,它是原生类 <strong>Window</strong> 的实例。</p>
<p>事实上，当我们在浏览器中运行JavaScript代码时，windows 是所有代码的根节点，所有的代码都是存储并挂接于这个节点的，当然多窗口的环境下会有多个window对象。</p>
<pre class="brush:jscript">function Car(){

}
dump(Car);
dump(window.Car);</pre>
<p>输出结果：</p>
<blockquote>
<div>
<div style="color: blue;"><strong>■ function</strong> <span style="color: green;">function Car() {&nbsp; &#8230;</span></div>
</p></div>
<div>
<div style="color: blue;"><strong>■ function</strong> <span style="color: green;">function Car() { &#8230;</span></div>
</p></div>
</blockquote>
<p>可以看到 Car 和 window.Car 是完全相同的东西</p>
<h3><strong>在类中使用 this<br />
	</strong></h3>
<p>现在我们来看看当使用类的时候，this会发生什么样的变化。下面是一段典型的类定义代码，我们来逐步分析：</p>
<pre class="brush:jscript">function Car(color,doors){
    //用构造模式定义属性
    this.color = color;
    this.doors = doors;
    this.dispThis = function(){
    	dump(this,&#39;this&#39;);
    };
    dump(this,&#39;this&#39;);
}

//原型方法
Car.prototype.dispThis2 = function(){
	dump(this,&#39;this&#39;);
};

//静态方法
Car.dispThis3 = function(){
	dump(this,&#39;this&#39;);
};

aCar = new Car(&#39;red&#39;,4);
aCar.dispThis();
aCar.dispThis2();
Car.dispThis3();
Car(&#39;red&#39;,4);
</pre>
<p>输出结果：</p>
<p>&nbsp;</p>
<blockquote>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object Object]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造函数 new Car()</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>color</strong> <strong>■ string</strong> <span style="color: green;">red</span></div>
<div>&#8211; <strong>doors</strong> <strong>■ number</strong> <span style="color: green;">4</span></div>
<div>&#8211; <strong>dispThis</strong> <strong>■ function</strong> <span style="color: green;">function () { dump(this, &quot;this&quot;); }&#8230;</span></div>
<div>&#8211; <strong>dispThis2</strong> <strong>■ function</strong> <span style="color: green;">function () { dump(this, &quot;this&quot;); }&#8230;</span></div>
</p></div>
</p></div>
</p></div>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object Object]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造方法 aCar.dispThis();</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>color</strong> <strong>■ string</strong> <span style="color: green;">red</span></div>
<div>&#8211; <strong>doors</strong> <strong>■ number</strong> <span style="color: green;">4</span></div>
<div>&#8211; <strong>dispThis</strong> <strong>■ function</strong> <span style="color: green;">function () { dump(this, &quot;this&quot;); }&#8230;</span></div>
<div>&#8211; <strong>dispThis2</strong> <strong>■ function</strong> <span style="color: green;">function () { dump(this, &quot;this&quot;); }&#8230;</span></div>
</p></div>
</p></div>
</p></div>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object Object]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //原型方法 aCar.dispThis2()</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>color</strong> <strong>■ string</strong> <span style="color: green;">red</span></div>
<div>&#8211; <strong>doors</strong> <strong>■ number</strong> <span style="color: green;">4</span></div>
<div>&#8211; <strong>dispThis</strong> <strong>■ function</strong> <span style="color: green;">function () { dump(this, &quot;this&quot;); }&#8230;</span></div>
<div>&#8211; <strong>dispThis2</strong> <strong>■ function</strong> <span style="color: green;">function () { dump(this, &quot;this&quot;); }&#8230;</span></div>
</p></div>
</p></div>
</p></div>
<div>
<div style="color: blue;">&nbsp;</div>
<div style="color: blue;"><strong>■ <span style="color: red;">this:</span> function</strong> <span style="color: green;">function Car(color, doors) { this.co&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0, 255, 255);">&nbsp;&nbsp;</span></span> //静态方法 Car.dispThis3()</div>
<div style="color: blue;">
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object Window]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //直接运行构造函数 Car()</p>
<div style="padding: 2px 3em; color: green;">[The window Object]</div>
</p></div>
</p></div>
</p></div>
</p></div>
</blockquote>
<p>&nbsp;</p>
<p>可以看到在构造函数、构造方法、原型方法中的都可以获取到this对象，它们指向同一个实例对象<strong>aCar</strong>，该对象由 <strong>new Car() </strong>语句生成。</p>
<p>在<strong>Car</strong>的静态方法 <strong>Car.dispThis4</strong>（其实就是Car的一个直接的function属性）中，this 就是<strong>Car</strong> 本身，</p>
<p>当不使用new 关键字，而直接运行类的构造函数<strong>Car</strong>（其实现在它就是一个普通函数）时，在函数内部 this 就是当前运行环境的window对象</p>
<p>注意：比较一下 <strong>aCar.dispThis()</strong> 和 静态方法 <strong>Car.dispThis3()</strong> 输出结果就可以发现：<strong>Car</strong> 和 <strong>Car</strong> 生成的对象是2个完全不同的概念；<strong>Car</strong>是一个函数对象，继承与原生的 <strong>Function</strong> ；而<strong>Car</strong>的实例<strong>aCar</strong>则是一个单纯的对象，它继承与JavaScript原生的 <strong>Object </strong></p>
<p>比较一下：</p>
<p style="text-align: center;">&nbsp;</p>
<p>&nbsp;</p>
<table align="center" border="1" cellpadding="1" cellspacing="1" style="width: 400px;">
<tbody>
<tr>
<td bgcolor="#ff6600">&nbsp;</td>
<td bgcolor="#ff6600" style="text-align: center;">代码</td>
<td bgcolor="#ff6600" style="text-align: center;">结果</td>
</tr>
<tr>
<td>1</td>
<td>aCar.dispThis();</td>
<td>this = aCar</td>
</tr>
<tr>
<td>2</td>
<td>aCar.dispThis2();</td>
<td>this = aCar</td>
</tr>
<tr>
<td>3</td>
<td>Car.dispThis3();</td>
<td>this = Car</td>
</tr>
<tr>
<td>4</td>
<td>new Car();</td>
<td>this = aCar</td>
</tr>
<tr>
<td>5</td>
<td>Car();</td>
<td>this = window</td>
</tr>
</tbody>
</table>
<p>通过这个表格特别是1、2、3行，我们可以清晰的得到一个规律：<strong>this 其实就等于调用代码时的调用的节点</strong>，即：aCar. 和 Car. 。这个调用节点也就是参考文档中所提到的<strong>上下文环境</strong>。</p>
<p>那么如何解释4、5的结果呢？</p>
<p>new Car();使用了一个特殊关键字 new ，这个关键字的作用就是生成一个新的对象，并赋值给 this 。所以 this = aCar</p>
<p>Car();没有通过任何节点调用，实际上通过了默认节点window 来调用，通过上一节我们也可以看出 Car 实际上就是 window.Car 。所以 this = window</p>
<h3><strong>总结和结论：</strong></h3>
<p><u><strong>JavaScript中所有的东西都是对象，包括数字、字符、函数以及对象的属性，函数总是存在（挂接）于某个对象中（默认存在于window对象），并通过某个对象调用的。在函数中总是有一个可用的的 this 变量，脚本引擎对 this 的解析是动态的，运行时的；<u><strong>它指向函数被调用时所挂接的对象。</strong></u></strong></u></p>
<p>我们可以通过一系列函数对象来进一步明晰这个过程，这些函数对象我们有时也称之为类的静态方法，实际上类的静态方法本身也是一个类，也是一个对象，明白了这一点，你就可以深刻理解Javascript的对象机制了。</p>
<pre class="brush:jscript">function Car(){
	this.name = &#39;car&#39;;
	e(this);
};

Car.Wheel = function(){
	this.name = &#39;wheel&#39;;
	e(this);

};

Car.Wheel.Size = function(){
	this.name = &#39;wheel.size&#39;;
	e(this);
}

Car();
Car.Wheel();
Car.Wheel.Size();
</pre>
<p>输出结果</p>
<blockquote>
<div style="color: blue;"><strong>■ object</strong> &#8211; [object Window]</div>
<div style="color: blue;"><strong>■ function</strong> <span style="color: green;">function Car() { this.name = &quot;car&quot;; &#8230;</span></div>
<div style="color: blue;"><strong>■ function</strong> <span style="color: green;">function () { this.name = &quot;wheel&quot;; &#8230;</span></div>
</blockquote>
<p>&nbsp;</p>
<table align="center" border="1" cellpadding="1" cellspacing="1" style="width: 400px;">
<tbody>
<tr>
<td bgcolor="#ff6600">&nbsp;</td>
<td bgcolor="#ff6600" style="text-align: center;">代码</td>
<td bgcolor="#ff6600" style="text-align: center;">结果</td>
</tr>
<tr>
<td>1</td>
<td>Car();</td>
<td>this = window</td>
</tr>
<tr>
<td>2</td>
<td>Car.Wheel();</td>
<td>this = Car</td>
</tr>
<tr>
<td>3</td>
<td>Car.Wheel.Size();</td>
<td>this = Car.Wheel</td>
</tr>
</tbody>
</table>
<h3><strong>当 this 遇到事件</strong></h3>
<p>当我们在事件函数中使用到 this 时，this 有时会很不听话，经常会取值为意料之外的对象。先来看一段示例代码：</p>
<p>我们定义一个类的方法函数 Car.prototype.show();</p>
<pre class="brush:jscript">function Car(){
	this.name = &#39;Class Car&#39;;
}

Car.prototype.show = function(){
	echo(&#39;On Car.show&#39;);
	dump(this,&#39;this&#39;);
};

aCar = new Car;
</pre>
<p>然后使用两个按钮的分别用两种方式触发 aCar.show;</p>
<pre class="brush:jscript">&lt;input id=&quot;btn1&quot; type=&quot;button&quot; value=&quot;Press Me call car.show&quot;/&gt;
&lt;input id=&quot;btn2&quot; type=&quot;button&quot; value=&quot;Press Me call car.show #2&quot;/&gt;

&lt;script type=&#39;text/javascript&#39;&gt;
   document.getElementById(&quot;btn1&quot;).onclick = aCar.show;
  &nbsp;document.getElementById(&quot;btn2&quot;).onclick = function(){aCar.show();}
&lt;/script&gt;
</pre>
<p>&nbsp;</p>
<p>输出结果</p>
<blockquote>
<div>//btn1 click</div>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object HTMLInputElement]</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>tagName</strong> <strong>■ string</strong> <span style="color: green;">INPUT</span></div>
<div>&#8211; <strong>value</strong> <strong>■ string</strong> <span style="color: green;">Press Me call car.show</span></div>
<div>&#8211; <strong>id</strong> <strong>■ string</strong> <span style="color: green;">btn1</span></div>
<div>&#8211; <strong>className </strong> <strong>■ string</strong></div>
<div>&#8230;&#8230;.</div>
</p></div>
</p></div>
</p></div>
<div>//btn2 click</div>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object Object]</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>name</strong> <strong>■ string</strong> <span style="color: green;">Class Car</span></div>
<div>&#8211; <strong>show</strong> <strong>■ function</strong> <span style="color: green;">function () { echo(&quot;On Car.show&quot;); &#8230;</span></div>
</p></div>
</p></div>
</p></div>
</blockquote>
<p>&nbsp;</p>
<p>我们看到<strong>btn1</strong>的<strong>click</strong>事件中 <strong>this </strong>的输出结果是 <strong>Input</strong>元素，</p>
<p><strong>btn2</strong>的<strong>Click</strong>事件中，<strong>this </strong>的输出结果是 <strong>aCar</strong>。</p>
<p>为什么会出现这一结果呢？</p>
<p>造成不同的主要原因是事件的绑定方式的不同，我们来看看事件的绑定过程：</p>
<p><strong>btn1</strong>使用<strong> document.getElementById(&quot;btn1&quot;).onclick = aCar.show&nbsp; </strong>这条语句进行了事件绑定。<br />
	我们把 btn1.click 指向（引用）了 aCar.show，当事件触发时 btn1.click 被调用（回调），也就是调用了 aCar.show&nbsp; 的代码；看起来一切正常，唯一需要注意的是： aCar.show&nbsp; 的内部代码不是以节点名称 aCar 来调用的，而是以节点 btn1 来调用的，也就是说此时 show()&nbsp; 的运行时节点是 btn1，那么 <strong>this </strong>也就成为了 <strong>btn1</strong>。</p>
<p><strong>btn2 </strong>使用&nbsp;<strong>document.getElementById(&quot;btn1&quot;).onclick = function(){aCar.show();} </strong>。<br />
	和btn1唯一的区别就是它使用了一个匿名函数把 aCar.show();包裹起来了。就是这样简单一个包裹引起根本性的变化，当事件触发时 btn1.click 被调用（回调），运行代码并不直接是 aCar.show ，而是通过匿名函数又再次调用 aCar.show ；此时调用的节点是 aCar ,所以 this = aCar 。</p>
<p>有些文章用事件函数的复制和引用来解释btn1和btn2结果的不同，这种解释实际是错误的，流于表象的，虽然很多文章还做了很多图来解释&#8230; JavaScript 的所有赋值语句都应该理解为引用，这又是另外一个话题，不扯远了&#8230;</p>
<p>我们来进一步比较不同事件函数绑定方式所带来的 this 的变化：</p>
<pre style="margin-right: -982px;">function Car(){
	this.name = &#39;Class Car&#39;;
}

Car.prototype.show = function(){
	dump(this,&#39;this&#39;);
};

aCar = new Car;

element.onclick = aCar.show;                       // this = element
element.addEventListener(&#39;click&#39;,aCar.show, false) // this = element

element.onclick = function () {aCar.show();}      // this = aCare
lement.attachEvent(&#39;onclick&#39;,aCar.show)           // this = aCare
&lt;element onclick=&quot;aCar.show();&quot;&gt;                  // this = aCare

element.onclick = function () {this.style.color = &#39;#cc0000&#39;;}     //this = element
&lt;element onclick=&quot;this.style.color = &#39;#cc0000&#39;;&quot;&gt;                 //this = element
</pre>
<p><strong><br />
	</strong></p>
<p><strong>总结：</strong><u><strong><u><strong>this 指向函数被调用时所挂接的对象。</strong></u></strong></u><strong>当事件函数被调用时，this 总是等于事件所在的节点，因此我们应该使用匿名函数作为事件函数，并在匿名函数中二次调用可能需要的其它函数。以此来避免可能的 this 混乱。<br />
	</strong></p>
<p>现在我们来看一段示范代码，这是一段典型的既能获取函数本身所在节点，又能获取触发对象的代码模式</p>
<pre style="margin-right: -982px;">function Car(){
	this.name = &#39;Class Car&#39;;
}

Car.prototype.doSomethin = function(obj){
  dump(this,&#39;this&#39;);  //this = aCar
  dump(obj,&#39;obj&#39;);    //obj = element
};

aCar = new Car();

&lt;element onclick=&quot;aCar.doSomething(this)&quot;&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //方法1
element.onclick = function() {aCar.doSomething(this)}     //方法2
</pre>
<p><strong>在类中进行事件绑定操作<br />
	</strong></p>
<p>当我们在类代码中进行事件绑定操作时，对this的使用会遇到新的困难，我们知道所有的事件函数中 this 都必然等于事件函数所在的对象（即上例中的btn1)，那么我们如何在一个类中书写一段匿名事件函数，并在匿名事件函数中调用当前类的对象呢？</p>
<p>看代码：</p>
<pre style="margin-right: -982px;">&lt;input id=&quot;btn1&quot; type=&quot;button&quot; value=&quot;Press Me call car.show&quot;/&gt;

&lt;script type=&#39;text/javascript&#39;&gt;&lt;!--

function Car(){
	this.name = &#39;Class Car&#39;;
}
Car.prototype.showThis = function(obj){
	dump(this,&#39;this&#39;);
	dump(obj,&#39;obj&#39;);
};
Car.prototype.bind = function(){
	document.getElementById(&quot;btn1&quot;).onclick = function(){ this.showThis(this); };
};

aCar = new Car;
aCar.bind();

--&gt;&lt;/script&gt;
</pre>
<p>如果你看到这里对 this 已经有了深刻的理解，那么就会发现这段代码实际使用的话会出错的，问题就出在这一行代码：</p>
<p style="margin-left: 40px;"><strong>document.getElementById(&quot;btn1&quot;).onclick = function(){this.showThis(this);};<br />
	</strong></p>
<p>这行代码的本身是在aCar.bind中运行，然后这行代码又写了一个匿名函数：<strong>function(){this.showThis(this);} 。</strong>匿名函数中我们希望调用当前对象 aCar 的方法 showThis ,同时又想把事件触发对象btn1 传递给 showThis。我们用了2个 this ，这里的 this 到底应该等于什么呢？两个 this 都应该等于 btn1 ,因为这个匿名函数将会以节点 btn1.click 来运行的。this.showThis 将会无法调用到我们希望的目标 aCar.showThis ；</p>
<p>那么如何改写这段代码，来正确的调用aCar.showThis 呢？似乎目前只有这个方法，使用一个临时变量来传递 this ：</p>
<p style="margin-left: 40px;"><strong>var </strong><span style="color: rgb(255, 0, 0);">_this</span> = this;</p>
<p style="margin-left: 40px;"><strong><strong>document.getElementById(&quot;btn1&quot;).onclick = function(obj){<span style="color: rgb(255, 0, 0);">_this</span>.showThis(obj);};</strong></strong></p>
<p>其实这样代码看起来有点让人难以理解，如果想更深入的解释这段代码，就需要进一步解释JavaScript的编译和解释运行机制，我对此也没有深入的研究，但是可以推测出的原因是：JavaScript的脚本引擎对变量的编译和解释是根据代码书写环境（书写节点）来进行的，而对this 似乎总是根据运行环境（运行节点）来赋值的。</p>
<h3><strong>回调函数和 this 使用的总结</strong></h3>
<p><span style="color: rgb(0, 100, 0);"><strong>关于 this 的使用似乎很让人头晕，特别是当 this 和事件和类混在一起使用的时候，如果你需要一个简单的方法来处理这个，我们可以归纳出几条规则</strong></span></p>
<ol>
<li><span style="color: rgb(0, 100, 0);"><strong>事件处理函数又可以称为回调函数(CallBack Function)，回调函数不仅仅用于界面事件（Click,Moueover等等）的处理，很多异步处理需要大量的回调函数。</strong></span></li>
<li><span style="color: rgb(0, 100, 0);"><strong>总是使用匿名函数作为回调函数，并在匿名函数中再调用其它命名函数，使用 event = function(){ somefunction(); }&nbsp; 的方式，不要使用 event = somefunction 的方式</strong></span></li>
<li><span style="color: rgb(0, 100, 0);"><strong>命名并传递默认参数，同时也可以把回调函数中的 this 传递给其它被调用函数。如：event = function(params){ somefunction(this,params); }</strong></span></li>
<li><span style="color: rgb(0, 100, 0);"><strong>如果在类中书写匿名回调函数，并且需要在函数中调用当前类的当前对象，使用一个临时变量来引用 function(){_this.showThis();};</strong></span></li>
</ol>
<p><strong>最后来看看常见的Jquery的事件绑定方式：</strong></p>
<pre style="margin-right: -982px;">&lt;input id=&quot;btn1&quot; type=&quot;button&quot; value=&quot;Press Me call car.show&quot;/&gt;
&lt;input id=&quot;btn2&quot; type=&quot;button&quot; value=&quot;Press Me call car.show #2&quot;/&gt;

&lt;script type=&#39;text/javascript&#39;&gt;&lt;!--

function Car(){
	this.name = &#39;Class Car&#39;;
}
Car.prototype.show = function(){
	echo(&#39;On Car.show&#39;);
	dump(this,&#39;this&#39;);
};
aCar = new Car;

$(&quot;#btn1&quot;).click(function(){aCar.show()});  //通过匿名函数2次调用 this = aCar
$(&quot;#btn2&quot;).click(aCar.show);                // this = btn2

--&gt;&lt;/script&gt;
</pre>
<p>输出结果</p>
<blockquote>
<div>On Car.show //这个是引用方式 this = aCar</div>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object Object]</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>name</strong> <strong>■ string</strong> <span style="color: green;">Class Car</span></div>
<div>&#8211; <strong>show</strong> <strong>■ function</strong> <span style="color: green;">function () { echo(&quot;On Car.show&quot;); &#8230;</span></div>
</p></div>
</p></div>
</p></div>
<div>On Car.show //这个是复制方式 this = btn2</div>
<div>
<div style="color: blue;">
<p><strong>■ <span style="color: red;">this:</span> object</strong> &#8211; [object HTMLInputElement]&nbsp;</p>
<div style="padding: 2px 3em; color: green;">
<div>&#8211; <strong>tagName</strong> <strong>■ string</strong> <span style="color: green;">INPUT</span></div>
<div>&#8211; <strong>value</strong> <strong>■ string</strong> <span style="color: green;">Press Me call car.show #2</span></div>
<div>&#8211; <strong>id</strong> <strong>■ string</strong> <span style="color: green;">btn2</span></div>
<div>&#8211; <strong>className </strong> <strong>■ string</strong></div>
<div>&#8230;&#8230;.</div>
</p></div>
</p></div>
</p></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/483/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascirpt IE中的HTMLElement</title>
		<link>http://lee.kometo.com/archives/487</link>
		<comments>http://lee.kometo.com/archives/487#comments</comments>
		<pubDate>Mon, 14 Dec 2009 03:08:53 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[WEB应用开发]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=487</guid>
		<description><![CDATA[在DOM标准中，每个HTML元素都是继承自HTMLElement。这是DOM的继承关系树：


这里的Node,HTMLElement,HTMLAnchorElement其实就是HTML元素对象的类声明，我们可以通过修改这些类的原型来修改所有相关的HTML元素特性。
但是，HTMLElement和Node在IE中是虽然存在的，但是IE屏蔽了它，我们是无法访问到它的。
所有的Node实例有个标准属性 nodeType,有时它可以帮助我们判断一个NODE的属性
&#160;
nodeType values chart 列表



Returned integer
Node type Constant


1
ELEMENT_NODE


2
ATTRIBUTE_NODE


3
TEXT_NODE


4
CDATA_SECTION_NODE


5
ENTITY_REFERENCE_NODE


6
ENTITY_NODE


7
PROCESSING_INSTRUCTION_NODE


8
COMMENT_NODE


9
DOCUMENT_NODE


10
DOCUMENT_TYPE_NODE


11
DOCUMENT_FRAGMENT_NODE


12`
NOTATION_NODE



比如判断一个对象是否为 HTMLElement的实例：
Oobj instanceof HTMLElement;         //这行代码在IE中会报错的
Oobj .nodeType == Node.ELEMENT_NODE; //这行代码在IE中会报错的
Oobj .nodeType == 1;                 //Node.ELEMENT_NODE=1 在IE中只能直接使用数字

//一段完整判断函数
function isElement(Oobj ){
    return !!(Oobj &#38;&#38; Oobj.nodeType == [...]]]></description>
			<content:encoded><![CDATA[<p>在DOM标准中，每个HTML元素都是继承自HTMLElement。这是DOM的继承关系树：</p>
<p style="text-align: center;"><a href="http://lee.kometo.com/wp-content/uploads/2009/12/200981518213488.jpg"><img alt="200981518213488" class="aligncenter size-full wp-image-488" height="293" src="http://lee.kometo.com/wp-content/uploads/2009/12/200981518213488.jpg" title="200981518213488" width="308" /></a></p>
<p><span id="more-487"></span></p>
<p>这里的Node,HTMLElement,HTMLAnchorElement其实就是HTML元素对象的类声明，我们可以通过修改这些类的原型来修改所有相关的HTML元素特性。</p>
<p>但是，HTMLElement和Node在IE中是虽然存在的，但是IE屏蔽了它，我们是无法访问到它的。</p>
<p>所有的Node实例有个标准属性 nodeType,有时它可以帮助我们判断一个NODE的属性</p>
<p>&nbsp;</p>
<h3 jquery1260758960156="2">nodeType values chart 列表</h3>
<table align="center" border="1" cellpadding="2" cellspacing="0" style="width: 200px;" width="100%">
<tbody>
<tr>
<th class="captions" valign="top" width="20%">Returned integer</th>
<th class="captions" width="80%">Node type Constant</th>
</tr>
<tr>
<td height="27" valign="top" width="20%">1</td>
<td height="27" width="80%">ELEMENT_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">2</td>
<td width="80%">ATTRIBUTE_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">3</td>
<td width="80%">TEXT_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">4</td>
<td width="80%">CDATA_SECTION_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">5</td>
<td width="80%">ENTITY_REFERENCE_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">6</td>
<td width="80%">ENTITY_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">7</td>
<td width="80%">PROCESSING_INSTRUCTION_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">8</td>
<td width="80%">COMMENT_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">9</td>
<td width="80%">DOCUMENT_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">10</td>
<td width="80%">DOCUMENT_TYPE_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">11</td>
<td width="80%">DOCUMENT_FRAGMENT_NODE</td>
</tr>
<tr>
<td valign="top" width="20%">12`</td>
<td width="80%">NOTATION_NODE</td>
</tr>
</tbody>
</table>
<p>比如判断一个对象是否为 HTMLElement的实例：</p>
<pre>Oobj instanceof HTMLElement;         //这行代码在IE中会报错的
Oobj .nodeType == Node.ELEMENT_NODE; //这行代码在IE中会报错的
Oobj .nodeType == 1;                 //Node.ELEMENT_NODE=1 在IE中只能直接使用数字

//一段完整判断函数
function isElement(Oobj ){
    return !!(Oobj &amp;&amp; Oobj.nodeType == 1);
} </pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>参考：</p>
<p>DOM对象参考手册 http://www.navioo.com/DOMReference/HTML/reference/api/htmldom2.index.php</p>
<p>这个站关于JavaScript的参考资料很好，很强大 http://www.navioo.com</p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/487/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript类的原型对象和继承</title>
		<link>http://lee.kometo.com/archives/480</link>
		<comments>http://lee.kometo.com/archives/480#comments</comments>
		<pubDate>Sat, 12 Dec 2009 16:44:37 +0000</pubDate>
		<dc:creator>kometo</dc:creator>
				<category><![CDATA[WEB应用开发]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=480</guid>
		<description><![CDATA[基本对象分析
JavaScript中所有的东西都是对象，包括函数、字符、数字等等等。但是JavaScript没有Class这个概念。
JavaScript使用Function来模拟类，任何一个function都有一个对应的prototype对象来存储和扩展这个function的定义，也就是说原型对象是关联于函数的
我们计划使用new关键字来调用并生成新对象的函数，我们称为&#8220;构造函数&#8221;
一个基本的函数分析
function Car(){
	color = &#39;red&#39;;
};

echo(Car);
echo(Car.constructor);
echo(Car.prototype);
echo(Car.prototype.constructor);

输出结果

function Car() { color = &#34;red&#34;; }
function Function() { [native code] }
[object Object]
function Car() { color = &#34;red&#34;; }


Car本身是一个函数
它的constructor是原生对象（Native Function）
在函数Car定义解析的同时，会系统生成一个对象 Car.prototype，它将会是所有由Car生成(new)的实例对象的原型对象，注意它是对象，这不同于常见的Class概念。默认的原型对象没有任何属性
Car的原型对象的Constructor就是Car自己，这也说明了原型对象是在函数定义的同时产生的。

原型对象
	
函数的原型对象是在脚本引擎解析每个函数代码时自动生成的，而不是执行时才生成
//function Car 是显式定义的，Car.prototype已经在代码解析时自动生成了，此时可以访问
echo(Car.prototype);
function Car(){};

//function Plan 是赋值定义的，Plan.prototype没有自动生成了，此时不能访问
echo(Plan.prototype);
Plan = function(){};
//现在才可以访问
echo(Plan.prototype); 
原型对象实际的工作方式是一种链式查找，脚本运行时，脚本引擎首先在当前实例对象中查找指定的属性，如果有就直接使用，如果没有就到原型对象中找，如果原型对象也没有，就到原型对象的原型对象中查找，这是一个递归的查找链。所有的JavaScript对象的查找链最终都会归结到原生函数Object的原型对象中去。
function Car(){
	this.color = &#39;red&#39;;
};

Car.prototype.color = &#39;blue&#39;;
Car.prototype.doors = 4;
Object.prototype.wheels = 4;

aCar = new Car;
echo(aCar.color);
echo(aCar.doors);
echo(aCar.wheels);
&#160;
输出结果：

red &#160;//注意：这里构造函数中定义的属性color覆盖了原型中的color定义
4 //从原型中查找到了doors
4 //从根原型中查找到了wheels

&#160;
实例对象的原型对象关系链是有脚本引擎内部维护的，我们不能操作和修改它，但是可以通过定义和修改构造函数的prototype属性来影响的以后生成(new)的实例对象的原型对象，而JavaScript的继承关系正是通过这一方式来模拟的。
&#160;
类的继承
	
JavaScript所有原生函数(Function,Array..)的Prototype对象指针是只读的，不能修改。你可以改变原型的内容，但不能改变原型对象本身。
而非原生函数的的原型对象是可以修改，如果把一个函数（A）的原型定义(prototype)指向另一个函数函数（B）的实例，这样可以就模拟出A继承B的效果
其实际效果是：把B的原型对象插入到了A的实例对象的原型链中去：
new A &#62; A.prototype &#62; B.prototype &#62; &#8230;. &#62; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>基本对象分析</strong></p>
<p>JavaScript中所有的东西都是对象，包括函数、字符、数字等等等。但是JavaScript没有Class这个概念。</p>
<p>JavaScript使用Function来模拟类，任何一个function都有一个对应的prototype对象来存储和扩展这个function的定义，也就是说原型对象是关联于函数的</p>
<p>我们计划使用new关键字来调用并生成新对象的函数，我们称为&ldquo;构造函数&rdquo;</p>
<p>一个基本的函数分析</p>
<pre class="brush:jscript">function Car(){
	color = &#39;red&#39;;
};

echo(Car);
echo(Car.constructor);
echo(Car.prototype);
echo(Car.prototype.constructor);
</pre>
<p>输出结果<span id="more-480"></span></p>
<blockquote>
<div>function Car() { color = &quot;red&quot;; }</div>
<div>function Function() { [native code] }</div>
<div>[object Object]</div>
<div>function Car() { color = &quot;red&quot;; }</div>
</blockquote>
<ol>
<li>Car本身是一个函数</li>
<li>它的constructor是原生对象（Native Function）</li>
<li>在函数Car定义解析的同时，会系统生成一个对象 Car.prototype，它将会是所有由Car生成(new)的实例对象的原型对象，注意它是对象，这不同于常见的Class概念。默认的原型对象没有任何属性</li>
<li>Car的原型对象的Constructor就是Car自己，这也说明了原型对象是在函数定义的同时产生的。</li>
</ol>
<p><strong>原型对象<br />
	</strong></p>
<p>函数的原型对象是在脚本引擎解析每个函数代码时自动生成的，而不是执行时才生成</p>
<pre class="brush:jscript">//function Car 是显式定义的，Car.prototype已经在代码解析时自动生成了，此时可以访问
echo(Car.prototype);
function Car(){};

//function Plan 是赋值定义的，Plan.prototype没有自动生成了，此时不能访问
echo(Plan.prototype);
Plan = function(){};
//现在才可以访问
echo(Plan.prototype); </pre>
<p>原型对象实际的工作方式是一种链式查找，脚本运行时，脚本引擎首先在当前实例对象中查找指定的属性，如果有就直接使用，如果没有就到原型对象中找，如果原型对象也没有，就到原型对象的原型对象中查找，这是一个递归的查找链。所有的JavaScript对象的查找链最终都会归结到原生函数Object的原型对象中去。</p>
<pre class="brush:jscript">function Car(){
	this.color = &#39;red&#39;;
};

Car.prototype.color = &#39;blue&#39;;
Car.prototype.doors = 4;
Object.prototype.wheels = 4;

aCar = new Car;
echo(aCar.color);
echo(aCar.doors);
echo(aCar.wheels);</pre>
<p>&nbsp;</p>
<p>输出结果：</p>
<blockquote>
<div>red &nbsp;//注意：这里构造函数中定义的属性color覆盖了原型中的color定义</div>
<div>4 //从原型中查找到了doors</div>
<div>4 //从根原型中查找到了wheels</div>
</blockquote>
<p>&nbsp;</p>
<p>实例对象的原型对象关系链是有脚本引擎内部维护的，我们不能操作和修改它，但是可以通过定义和修改构造函数的prototype属性来影响的以后生成(new)的实例对象的原型对象，而JavaScript的继承关系正是通过这一方式来模拟的。</p>
<p>&nbsp;</p>
<p><strong>类的继承<br />
	</strong></p>
<p>JavaScript所有原生函数(Function,Array..)的Prototype对象指针是只读的，不能修改。你可以改变原型的内容，但不能改变原型对象本身。</p>
<p>而非原生函数的的原型对象是可以修改，如果把一个函数（A）的原型定义(prototype)指向另一个函数函数（B）的实例，这样可以就模拟出A继承B的效果</p>
<p>其实际效果是：把B的原型对象插入到了A的实例对象的原型链中去：</p>
<p style="text-align: center;"><strong>new A &gt; A.prototype &gt; B.prototype &gt; &#8230;. &gt; Object.prototype<br />
	</strong></p>
<pre class="brush:jscript">//这样的代码是不能执行的
Array.prototype = new String(&#39;&#39;);

function Car(){}
function RaceCar(){}
//RaceCar 现在继承了 Car 的定义
RaceCar.prototype = new Car;
</pre>
<p>考虑到修改函数原型对象时可能会造成修改前的原型定义丢失，所有应该仅可能早的指定原型对象。</p>
<p>同时你也许需要修改新原型对象的constructor，使其指向当前构造函数，典型的继承关系处理代码如下：</p>
<pre class="brush:jscript">function Car(){
	Car.prototype.color = &#39;blue&#39;;
	this.doors = 4;
}

function RaceCar(){
	RaceCar.prototype.color = &#39;red&#39;;
	this.doors = 2;
}
RaceCar.prototype = new Car; //RaceCar 现在继承了 Car 的定义
RaceCar.prototype.constructor = RaceCar;  //修改constructor

aCar = new RaceCar();

Car.prototype.wheels = 4;

echo(aCar.color);
echo(aCar.wheels);
</pre>
<p>输出结果为：</p>
<blockquote>
<div>red</div>
<div>4</div>
</blockquote>
<p>11</p>
<p>建模结构图</p>
<p>我们使用一段代码及其对应的建模结构图来进一步说明JavaScript的继承处理方式：</p>
<p>代码：</p>
<pre class="brush:jscript">function A(){

}

B.prototype = new A;
B.prototype.constructor = B;

function B(){

}
</pre>
<p>结构图：</p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><img align="middle" alt="prototype" class="aligncenter size-full wp-image-484" height="284" src="http://lee.kometo.com/wp-content/uploads/2009/12/prototype.gif" title="prototype" width="425" /></p>
<p>&nbsp;</p>
<p>参考：http://mckoss.com/jscript/object.htm</p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/480/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
