打印

关于this关键字的问题!!希望高手进来解答下!

最近在看JAVASCRIPT权威指南5
第143页讲作为方法的函数,this有3种指向
1 当一个函数作为方法调用时,this指向掉用该方法的对象
2 当一个函数作为函数调用的时候,this指向全局对象
3当一个嵌套的函数(作为函数)在一个包含的函数之中调用,而这个包含的函数是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但他却(不太直观地)引用嵌套的函数体的内部的全局对象.
前2个都简单,
第3个情况,不明白,而且我自己也举不出例子来,第3种情况我是完全抄写的书上的,有没有高手来解答下,最好举个例子,形象点!!!!
这样的

 提示:您可以先修改部分代码再运行
或者这样的

 提示:您可以先修改部分代码再运行
又仔细的读了一次
引用:
3当一个嵌套的函数(作为函数)在一个包含的函数之中调用,而这个包含的函数是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但他却(不太直观地)引用嵌套的函数体的内部的全局对象.
感觉这句话的描述应该是我举的例子的第二个代码段.

当一个嵌套的函数(作为函数)  这一个指的是d
在一个包含的函数之中调用,而这个包含的函数是作为方法调用的   这里的包含函数指的是 a,    a为一个函数.而它是做为c的一个方法调用的.



PS:本人愚见,望各位高手轻点拍砖.

[ 本帖最后由 faeng220 于 2008-9-23 12:12 编辑 ]
可能是这样的

 提示:您可以先修改部分代码再运行
当一个嵌套的函数(作为函数)(指的是s2)在一个包含的函数(指的是b)之中调用,而这个包含的函数是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但他却(不太直观地)引用嵌套的函数体(这里可能指的是c,而不是s2,不然s2作为函数其内部的全局对象如何被引用?后面的this==window证实了第二条的说法)的内部的全局对象.
前端设计 javascirpt

TOP

非常感谢楼上的2位

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
我认为楼上的回答还是有问题的
<script>
var a=3;
var c=function(a){
this.a=a;
this.b=function(){
  s2(this);
  function s2(c){alert(this.a);alert(this==window)}
}
}
var o=new c(2);
o.b();
</script>
这里我修改了一下你的例子,在s2中this指的是全局对象,其实只说明了,当函数(s2)作为函数调用时,this指向全局对象,我设置了一个全局对象var a=3  s2中的this.a就是指的是3(其实解释了我所说的this用法中的第2个)
并没有解释 this关键字在包含的函数中有一个值,但是他却(不太直观的)引用嵌套的函数体的内部的全局对象。(注意,这里 什么是嵌套的函数体的内部的全局对象)

[ 本帖最后由 chinawuyi 于 2008-9-25 03:42 编辑 ]

TOP

<script>
var a=3;
var c=function(a){
this.a=a;
this.b=function(){
  s2();
  function s2(c){alert(this.a);alert(this==window)}
  alert(this.a);
}
}
var o=new c(2);
o.b();
</script>
当一个嵌套的函数(作为函数)(指的是s2)在一个包含的函数(指的是b)之中调用,而这个包含的函数是作为方法调用的,这也是成立的:this关键字在包含的函数中有一个值,但他却(不太直观地)引用嵌套的函数体(这里可能指的是c,其实就是c的实例)的内部的全局对象.

TOP

引用:
原帖由 chinawuyi 于 2008-9-25 03:50 发表

var a=3;
var c=function(a){
this.a=a;
this.b=function(){
  s2();
  function s2(c){alert(this.a);alert(this==window)}
  alert(this.a);
}
}
var o=new c(2);
o.b();

当一个嵌套的函数(作为函数 ...
你和我说的是一个意思啊
前端设计 javascirpt

TOP