浏览 3972 次
锁定老帖子 主题:请指教对象直接量中引用this的问题?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-20
(1) var xx = function() { this.a = "xx"; this.b = this.a; } alert(new xx().b); (2) var x = function() { this.a = "x"; this.b = {a:"x.b",b:this.a,c:function(){return this.a;}}; } var s = new x(); alert(s.b.c()); 代码(1)的结果是 "xx" ,也就是说this.b = this.a 引用的本对象中的另一个属性也就是a, 但(2)中的结果是 "x.b",这本来也是我意料中的事,因为肯定是引用着本对象中的a,但b:this.a,这里的a为什么引用的是x 类中的a变量而不是 b变量中的a变量中呢?是不是因为对象直接量中的属性(非function属性)不用引用或者说不存在this指针?请指点一下.......... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-21
javascript的变量作用域是函数(function)级的,而不是块级(即大括号包围的块)的,所以,在c:function(){}这条语句前面的代码,都属于第一个函数var x = function() { }的作用范围,当然this就是这个范围的this了,但是c里面是另一个范围,这就不难理解了。
不知道我说清楚没有,汗自己一个…… |
|
返回顶楼 | |
发表时间:2007-05-21
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。 |
|
返回顶楼 | |
发表时间:2007-05-21
会不会是因为对象直接量在生成的顺序的问题而导至的呢,而跟变量作用域没有关系呢,如下:
var x = {a:"x"}; 是否等同于:var x = new Object();x.a="x"; 如果是这样的话就不难解释上面的了,因为 var x = function() { this.a = "x"; this.b = {a:"x.b",b:this.a,c:function(){return this.a;}}; } 就等同于 var x = function() { this.a = "x"; this.b = new Object(); this.b.a="x.b"; this.b.b=this.a; this.c=function(){return this.a;}; } |
|
返回顶楼 | |
发表时间:2007-05-21
应该是this.b.c吧,呵呵
这么说也是有道理的,是对上面说的“变量作用域”的另一个解释而已 |
|
返回顶楼 | |
发表时间:2007-05-22
hax 写道 楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。 this 跟 function scope 没关系,this 只跟执行上下文有关系。 |
|
返回顶楼 | |
发表时间:2007-05-22
andot 写道 hax 写道 楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。 this 跟 function scope 没关系,this 只跟执行上下文有关系。 我指的是他帖子里的问题,要知道多个this分别对应的哪个,需要先搞清this所属的function(或者不属于任何function)。你说的那个是执行时。两码事。 |
|
返回顶楼 | |
发表时间:2007-05-22
hax 写道 andot 写道 hax 写道 楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。 this 跟 function scope 没关系,this 只跟执行上下文有关系。 我指的是他帖子里的问题,要知道多个this分别对应的哪个,需要先搞清this所属的function(或者不属于任何function)。你说的那个是执行时。两码事。 你要说 this 所在的那个执行的 function 所属的对象(或者不属于任何对象)我就明白了。 |
|
返回顶楼 | |