惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
T
Tenable Blog
Project Zero
Project Zero
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
S
Schneier on Security
Scott Helme
Scott Helme
S
Securelist
Know Your Adversary
Know Your Adversary
Vercel News
Vercel News
IT之家
IT之家
V
V2EX
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
K
Kaspersky official blog
博客园_首页
T
Tailwind CSS Blog
The GitHub Blog
The GitHub Blog
Spread Privacy
Spread Privacy
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
有赞技术团队
有赞技术团队
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
L
LINUX DO - 热门话题
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
S
SegmentFault 最新的问题
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost

博客园 - Sangplus

[转]C#单进程解决方案 extern alias 英语面试常用语 【转】FLASH轮换广告源码 走马灯的js代码 让Enumerable可以具有each方式的语法。 C#之扩展方法学习 使用非托管代码进行字节数组的快速拷贝 c#复习——虚方法、重写方法和抽象方法(官方解释) vs2005工具栏重置 一种实用的页面传参方法 所有HTTP状态代码及其定义 ASP.NET验证控件祥解[转] C#制作WinForm控件[转] 关于web.config的读写管理 关于SqlServer2005开发者版不同电脑之间的连接问题 不知不觉代码已经超过1万行了 关于RequiredFieldValidator的怪异现象 javascript添加下拉列表和速度有关系吗?
JavaScript中有时候需要给this起一个别名。
Sangplus · 2007-12-24 · via 博客园 - Sangplus

 在大口仔的随笔里面,曾提到过多种javascript中的this用法。然而有时候this可能绑定的不是我们真正想绑定的那个对象,而我们又不得不用它来传递一些东西的时候,采用别名可能是一个不错的选择,下面的例子会说明我的问题。
我要做一个类,来管理页面上的一些html对象,这个类可以动态添加索要管理的对象,并改变所管理对象的一些性质,例如它的onclick事件。就拿onclick来说吧,如果我希望得到被管理对象的一些数据,例如id,也想得到管理者的一些属性,例如所管理对象的数量,那采用this就会发生一些小问题。
(用到了prototype.js脚本库,简化一些操作,大家可以很容易摆渡到)。
页面代码:

Code

脚本代码。

Code

注意,以上的脚本代码会在13行处发生问题,在:

ele.onclick=function(){this.dealEle(theIndex,ele);};

处提示为:
原因就出在这个this上,因为这里的this被动态邦定到ele上了。那么如何能邦定到Mangager对象的dealEle方法上呢,这里我们可以在add函数中给Mangager起个别名,然后就得到了他的dealEle方法引用了,很明显,在function(){this.dealEle(theIndex,ele);};的函数体内,this是指向ele的,为了加深印象,我们把这里的ele参数修改为this。
修改后的脚本代码如下:

Code


说明:
Mangager类中,add和dealEle中的this一般指向Mangager对象;
虽然ele.onclick=function(){theManager.dealEle(theIndex,this);};语句在Mangager类的add方法中,但与具体里面的this并不指向Mangager,而是指向ele对象。要想在其中得到Mangager的引用,需要在add函数内,该语句之外给this(Mangager)指定一个别名,然后在该语句内用这个别名来引用Mangager。
运行效果为:

总结:从上面的代码可以看出来,js中适当时候采用this别名而不是this本身,可以防止某些误邦定现象,达到用户理想的效果。