WEB开发网
开发学院网页设计JavaScript Javascript中的this关键字 阅读

Javascript中的this关键字

 2010-09-14 13:23:59 来源:WEB开发网   
核心提示: 1、运行如下代码functionOuterFoo(){this.Name='OuterName';functionInnerFoo(){varName='InnerName';alert(Name+','+this.Name);}return

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,我们要搞清楚我们是把它当作函数使用还是在当作类使用

上一页  2 3 4 5 6 7 

Tags:Javascript this 关键字

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接