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

推荐订阅源

I
Intezer
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cybersecurity and Infrastructure Security Agency CISA
N
News | PayPal Newsroom
T
Tenable Blog
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
P
Privacy International News Feed
IT之家
IT之家
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
博客园_首页
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
NISL@THU
NISL@THU
I
InfoQ
D
DataBreaches.Net
有赞技术团队
有赞技术团队
K
Kaspersky official blog
Security Latest
Security Latest
The Register - Security
The Register - Security
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
P
Proofpoint News Feed
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic

博客园 - 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本身,可以防止某些误邦定现象,达到用户理想的效果。