Javascript中的this关键字
2010-09-14 13:23:59 来源:WEB开发网1、运行如下代码
functionOuterFoo(){
this.Name='OuterName';
functionInnerFoo(){
varName='InnerName';
alert(Name+','+this.Name);
}
returnInnerFoo;
}
OuterFoo()();
所显示的结果是“Inner Name, Outer Name”
OuterFoo是一个函数(而不是类),那么第一句
this.Name='OuterName';
中的this指的是window对象,所以OuterFoo()过后window.Name = ‘Outer Name’;
并且将InnerFoo返回,此时InnerFoo同样是一个函数(不是类),执行InnerFoo的时候,this同样指window,所以InnerFoo中的this.Name的值为”Outer Name”(window.Name充当了一个中转站的角色,让OuterFoo能够向InnerFoo传递“Outer Name”这个值),而Name的值即为局部变量”Inner Name”
2、运行如下代码
functionJSClass(){
this.m_Text='divisionelement';
this.m_Element=document.createElement('DIV');
this.m_Element.innerHTML=this.m_Text;
if(this.m_Element.attachEvent)
this.m_Element.attachEvent('onclick',this.ToString);
elseif(this.m_Element.addEventListener)
this.m_Element.addEventListener('click',this.ToString,false);
else
this.m_Element.onclick=this.ToString;
}
JSClass.prototype.Render=function(){
document.body.appendChild(this.m_Element);
}
JSClass.prototype.ToString=function(){
alert(this.m_Text);
alert(this==window);
}
window.onload=function(){
varjc=newJSClass();
jc.Render();
jc.ToString();
}
点击“divisionelement”会显示“undefined”,在ie下还要显示“true”,其他浏览器中还要显示“false”。
实例声明和调用实例方法都没什么可说的,元素的click事件的绑定到了一个实例的方法,那么通过addEventListener绑定到的方法是拷贝过后的,所以this指的是html元素,这个元素没有m_Text属性(m_Text属性是属于JSClass的实例的,即属于jc的),所以点击元素显示undefined,attachEvent绑定的事件会将函数复制到全局,此时this指的是window对象,点击元素也会显示“undefined”。只有在调用jc.ToString()方法是,this指的是jc这个对象,因为jc拥有m_Text,所以能够显示“division element”。
六、总结
怎样在一个代码环境中快速的找到this所指的对象呢?我想要注意以下三个方面:
1、要清楚的知道对于函数的每一步操作是拷贝还是引用(调用)
2、要清楚的知道函数的拥有者(owner)是什么
3、对于一个function,我们要搞清楚我们是把它当作函数使用还是在当作类使用
Tags:Javascript this 关键字
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接