以文本方式查看主题

-  ╋艺 镇╋  (http://zyzsky.com/bbs/index.asp)
--  ┣◇网站建设&Web语言  (http://zyzsky.com/bbs/list.asp?boardid=4)
----  [js]关于js中的this关键字  (http://zyzsky.com/bbs/dispbbs.asp?boardid=4&id=2230)

--  作者:admin
--  发布时间:2010/9/9 17:08:55
--  [js]关于js中的this关键字
<script type="text/javascript">
function show()
{
window.alert(this.info);
}

function MyInformation(mycity,myuniversity,myyear)
{
this.city=mycity;
this.university=myuniversity;
this.year=myyear;
this.info="毕业于"+this.city+this.university+":"+this.year+"年";
this.show=show;
}

MI=new MyInformation("成都","电子科技大学","1999");
</script>
<form>
<input type="button" value="aboutme" />
</form>

这是一般js教材上的一段例子
但讲解得不是很详细

我想问问的是
1.在前面的function show()中的"this"不是指show()吗? 但好像实际情况是指MyInformation() 为什么会这样??
2.function MyInformation中的"this.show=show;"到底有什么用啊?
删除又不能运行.


如有表述错误不要见怪~初学者~
越详细越好~~~~~谢谢~
--  作者:admin
--  发布时间:2010/9/9 17:09:09
--  
下面的那个MyInformation函数是一个类的声明,也就是说MyInformation是一个类的构造器,而它里面有一句this.show=show;
这一句的意思是这个类中有一个show方法(this.show),所谓方法就是类特有的一个函数,所以在show这个函数,其实是MyInformation类的一个方法,而show里面的this,当然指的是MyInformation这个类本身,而不是show.

这个例子,程序不应该这样写,这样写对于初学者可能不是很好理解,
实际应该把function show(){...}这个函数写到MyInformation的里面
也就是类似于:

function MyInformation(){
  this.xxx=aaa;
  this.yyy=bbb;
  ....
  this.show=function(){
     alert(this.info);
  }
}

这样写的话你可能容易理解一点。当然我们还可以通过prototype原型构造器来构造这个方法,形如:

function MyInformation(){
  this.xxx=aaa;
  this.yyy=bbb;
  ....
}
MyInformation.prototype.show=function(){
   alert(this.info);
}

这种方式,我给出的这两种方式都是js最标准的类的方法声明,你再找找相关的教程或例子。

下面是我的个人网站,里面有大量js教程,希望对你有所帮助: