`
sam1982
  • 浏览: 10070 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多
如下代码:
(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指针?请指点一下..........
分享到:
评论
7 楼 andot 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 所属的对象(或者不属于任何对象)我就明白了。
6 楼 hax 2007-05-22  
andot 写道
hax 写道
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。


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



我指的是他帖子里的问题,要知道多个this分别对应的哪个,需要先搞清this所属的function(或者不属于任何function)。你说的那个是执行时。两码事。
5 楼 andot 2007-05-22  
hax 写道
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。


this 跟 function scope 没关系,this 只跟执行上下文有关系。
4 楼 笨笨狗 2007-05-21  
应该是this.b.c吧,呵呵
这么说也是有道理的,是对上面说的“变量作用域”的另一个解释而已
3 楼 sam1982 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;};
}
2 楼 hax 2007-05-21  
楼上基本上说清楚了。js中的this关键字只在function内有效(或者指向global对象),要知道this指的是哪一个,看一下当前最近的function scope即可。
不过未来的js2.0会改变一下规则。
1 楼 笨笨狗 2007-05-21  
javascript的变量作用域是函数(function)级的,而不是块级(即大括号包围的块)的,所以,在c:function(){}这条语句前面的代码,都属于第一个函数var x = function() { }的作用范围,当然this就是这个范围的this了,但是c里面是另一个范围,这就不难理解了。

不知道我说清楚没有,汗自己一个……

相关推荐

Global site tag (gtag.js) - Google Analytics