论坛首页 Web前端技术论坛

请指教对象直接量中引用this的问题?

浏览 3972 次
精华帖 (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指针?请指点一下..........
   发表时间:2007-05-21  
javascript的变量作用域是函数(function)级的,而不是块级(即大括号包围的块)的,所以,在c:function(){}这条语句前面的代码,都属于第一个函数var x = function() { }的作用范围,当然this就是这个范围的this了,但是c里面是另一个范围,这就不难理解了。

不知道我说清楚没有,汗自己一个……
0 请登录后投票
   发表时间:2007-05-21  
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。
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;};
}
0 请登录后投票
   发表时间:2007-05-21  
应该是this.b.c吧,呵呵
这么说也是有道理的,是对上面说的“变量作用域”的另一个解释而已
0 请登录后投票
   发表时间:2007-05-22  
hax 写道
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。


this 跟 function scope 没关系,this 只跟执行上下文有关系。
0 请登录后投票
   发表时间:2007-05-22  
andot 写道
hax 写道
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。


this 跟 function scope 没关系,this 只跟执行上下文有关系。



我指的是他帖子里的问题,要知道多个this分别对应的哪个,需要先搞清this所属的function(或者不属于任何function)。你说的那个是执行时。两码事。
0 请登录后投票
   发表时间: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 所属的对象(或者不属于任何对象)我就明白了。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics