首页 新闻 会员 周边 捐助

JS对象直接量里面的this问题

0
悬赏园豆:50 [已解决问题] 解决于 2012-09-18 16:51
var b={a:12,c:a};alert(b.c)我知道这样写是不对的,但是如果我这样写
var b={a:12,c:this.a};alert(b.c)为什么也是不对?这里的this指的是什么?或者我这样写,b={a:12,c:b.a};alert(b.c)为什么也是不对的。有没有大侠愿意帮忙解释下,谢谢。
问题补充:

   var b={a:12,c:function(){return this.a}};
   alert(b.c());

那为什么这样的就可以?this指向b对象呢?

少年学编程的主页 少年学编程 | 初学一级 | 园豆:3
提问于:2012-09-18 14:27
< >
分享
最佳答案
0

var b={a:12,c:a};alert(b.c)   这个不对是因为a是b里面的属性,不是变量,不能给c赋值,就像你的css中的background的值不能赋值给width一样。

var b={a:12,c:this.a};alert(b.c)  这里面的this是当前对象,如果页面上只有这一段脚本就是指window

b={a:12,c:b.a}; 这个不对的原因和第一条一样

收获园豆:10
田林九村 | 老鸟四级 |园豆:2367 | 2012-09-18 14:41
其他回答(4)
0

一,你知道的就不说了;

二,首先让你看看JSON的正确写法,如下

var obj={
    "A":12,
    "B":10 
};

也就是说类似“A”,“B”是需要有引号(当然没有引号也可以运行)。但是我觉得如果一接触json就是这种写法,那么今天你就不会有这样的疑问了。

接着说你写的第二个例子,这里this指的是window对象,所以A是undefined。

三,从语法上就是错的。

收获园豆:10
写代码的小2B | 园豆:4377 (老鸟四级) | 2012-09-18 14:43
0

这边的this 其实是window,全局中没有定义a,所以你的第2个语句显示的是undefined

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2012-09-18 14:43
0

同一楼,c要引用a只能作为函数在里面引用:

var b={a:12,c:function(){return this.a;}};

b.c();

this是指向代码调用/执行者,上面this指向b所以能取到b的a。

你而的代码执行者是window所以this也是window。

收获园豆:10
向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-18 14:55
0

this是指向代码调用/执行者,上面this指向b所以能取到b的a。

收获园豆:10
jason2013 | 园豆:1998 (小虾三级) | 2012-09-18 16:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册