问个很简单的对象直接量问题 var obj = { a:this.b, b:123}alert(obj.a)请问这个a属性怎么取不到b属性的123呢,要想取怎么取到呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 {}已经是实例了,this就不是指obj了,b = 111var obj = { a:this.b, b:123}alert(obj.a) var obj = { a:function(o){return o;},b:123 }alert(obj.a(obj).b); 在定义类时this表示自身,也就是this要在类的构造函数内部才能指向类的对象,而{}只是给一个对象赋值,并不是定义了一个类,这个要区分清楚,{}内部并不是构造函数。你这儿的this的只带和在{}外面写一个this是完全一样的 var obj = { a:2, b:3,c:function(){this.m=this.a*this.b}}obj.c()alert(obj.m)请问c方法中a前面的this, 怎么就表示了a属性?还有这个m,它是obj对象的属性吗? 我们仔细分析下:给c赋值一个函数,该函数就是obj对象的一个方法是肯定的,在对象的成员方法中,this指代对象本身就像你不这样写,你换一种写法var obj = { a:2, b:3}obj.c=function(){this.m=this.a*this.b;}也是同样的效果,并不是说你这个就变成构造函数了,只是js弱类型的灵活性体现。既然此处this指代obj本身,那执行c方法后就相当于执行了obj.m=obj.a*obj.b;出现这种结果就很显然了吧? 看来你没有理解弱类型的灵活性。这样理解:在obj={a:2,b:3,c:function(){this.m=this.a*this.b;}}后obj.a=2,obj.b=3,obj.m=undefind(你可以自己验证)此时obj.m没有赋值,所以是undefind(js中所有没有定义的变量值都是undefind)然后执行obj.c(),如之前所说,相当于执行obj.m=obj.a*obj.b,此时obj.m被赋值,故其为6所以说你不要管什么是不是属性的问题,其实只是有没有赋值的区别 谢谢 wzs_xyz 大概明白这意思了 告诉你答案这样写就可以取到了var obj = { b:123, a:this.b}alert(obj.a)看懂没? var obj= {a:1,b:this.a};alert(obj.b);输出:undefined这里this指向window:var a = 0var obj= {a:1,b:this.a};alert(obj.b);输出为0。但如果将b属性定义为一个方法则没问题:var obj= {a:1,b:function(){return this.a;}};alert(obj.b());输出1,this指向obj。 那人根本不懂。要弄清楚this在各种情况下的指代对象,不真真正正写上几个控件是不得行的其实说穿了也简单:方法中的this指代的就是方法的拥有者,全局函数中的this指代window,局部函数中的this要看上下文,看其归属的对象但是要记住,this只有在函数调用时才能确定其中的this的指代,比如同一个函数作为全局函数被调用和作为方法被调用其this代表的东西就不一样。var obj=new Object();function test(){ alert(this);} obj.test=test;test();obj.test();//都是这个函数,但是this不一样,自己体会话说了这么多,你该结贴给分了吧? 急!如何php用js实现联动时间选择框。 判断浏览器后载入.js文件 100分求无刷新跳转页面(<iframe>中) 关于滤镜的兼容性问题 用过artdialog的帮忙看下 请求各位前辈推荐一本学习JavaScript的书籍!! js作用域问题 关于Frame的总题,请高手指点,高分重谢!!!!!! 假如我有一组radiobutton(单选按钮),3个。如何实现选择后单击一个按钮就跳到不同的页面?在线等待 怎么判断我的外部js文件函数被调用了?? 闭包问题?求大牛给个解释! 如何在不同的浏览器中加载 .jnlp 应用程序?
var obj = { a:this.b, b:123}
alert(obj.a)
alert(obj.a(obj).b);
obj.c()
alert(obj.m)
请问c方法中a前面的this, 怎么就表示了a属性?
还有这个m,它是obj对象的属性吗?
给c赋值一个函数,该函数就是obj对象的一个方法是肯定的,在对象的成员方法中,this指代对象本身
就像你不这样写,你换一种写法
var obj = { a:2, b:3}
obj.c=function(){this.m=this.a*this.b;}
也是同样的效果,并不是说你这个就变成构造函数了,只是js弱类型的灵活性体现。
既然此处this指代obj本身,那执行c方法后就相当于执行了obj.m=obj.a*obj.b;
出现这种结果就很显然了吧?
这样理解:
在obj={a:2,b:3,c:function(){this.m=this.a*this.b;}}后
obj.a=2,obj.b=3,obj.m=undefind(你可以自己验证)
此时obj.m没有赋值,所以是undefind(js中所有没有定义的变量值都是undefind)
然后执行obj.c(),如之前所说,相当于执行obj.m=obj.a*obj.b,此时obj.m被赋值,故其为6
所以说你不要管什么是不是属性的问题,其实只是有没有赋值的区别
这样写就可以取到了
var obj = { b:123, a:this.b}
alert(obj.a)
看懂没?
a:1,
b:this.a
};
alert(obj.b);
输出:undefined这里this指向window:
var a = 0
var obj= {
a:1,
b:this.a
};
alert(obj.b);
输出为0。但如果将b属性定义为一个方法则没问题:
var obj= {
a:1,
b:function(){return this.a;}
};
alert(obj.b());
输出1,this指向obj。
要弄清楚this在各种情况下的指代对象,不真真正正写上几个控件是不得行的
其实说穿了也简单:
方法中的this指代的就是方法的拥有者,全局函数中的this指代window,局部函数中的this要看上下文,看其归属的对象
但是要记住,this只有在函数调用时才能确定其中的this的指代,比如同一个函数作为全局函数被调用和作为方法被调用其this代表的东西就不一样。
var obj=new Object();
function test()
{
alert(this);
}
obj.test=test;
test();
obj.test();//都是这个函数,但是this不一样,自己体会
话说了这么多,你该结贴给分了吧?