var obj= {
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。这是为何?
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。这是为何?
真想不通那些js高手怎能用js开发游戏的。
这里this指向window:
var a = 0
var obj= {
a:1,
b:this.a
};
alert(obj.b);
输出为0。是因为你定义了a 跟this不this的没任何关系~~~
a:1没任何意义~~~ 你没有定义a,当然报undefined了
var a = 0
var obj= {
b:this.a
};
alert(obj.b);
你试试看~~
而其他语言的变量作用域用 大括号{}来划分。
你那个this,是在全局下的,那就是window。
var a = 0
var obj= {
a:1,
b:this.a
};
alert(obj.b);
//输出为0这个例子有错吧,输出的是undefined
function fn(){
alert(this.a);
}有两种情况
1,new fn();//this指向函数本身
2,fn();//this指向相对于当前作用域的父级作用域,所以在这里是window;
如果以下情况a = "123";
function fn(){
this.a = "111"
function fn1(){
alert(this.a);
}
fn1(); //这时候this指向的是fn这个作用域中的a,而并不是window下的a
}
楼主这样定义类,在给类属性赋值时,必须那个属性有个实际值,比如属性a的实际值是1,b的实际值是this.b。这就出现了问题,我当前有没有使用obj对象,我的this关键字也不能指向自己的对象实例啊,但是我得给b属性赋值啊,怎么办,this就会去搜索作用域,最后发现window对象可以用,然后就指向它了。
然后就是b:function(){return this.a;}这样为什么可以,因为给b属性赋值的是一个function对象,这个function只是定义了,然后赋给b但并未执行。当调用b时,this发现,我是在obj对象实例下调用的b方法,然后它就乖乖的指向obj对象了
不知道这样说是不是可以通俗易懂些?
var obj= {
a:1,
b:this.a
};
alert(obj.b);
//输出为0
没错,是输出0,在ie和ff下都是报0
this是指向函数的调用者(call/apply方法除外)。
在全局下,调用者就是window。
在
var obj = {a:this.b};
实际上是将this.b赋值给obj的a属性。而这个时候的this是window。
var obj = {a:function(){this.b}}
是将function赋值给obj的a属性,然后 obj.a();的时候,调用者就是obj,所以this就是obj。
全局下面的 var定义的东西实际上是window下面的属性 function fun (){}这种定义的函数我们调用他 那么他里面的this也是window 当然 我们可以改变这个this的只 我们有call 和apply
在
var obj = {a:this.b};
实际上是将this.b赋值给obj的a属性。而这个时候的this是window。
var obj = {a:function(){this.b}}
是将function赋值给obj的a属性,然后 obj.a();的时候,调用者就是obj,所以this就是obj。
类的定义有好多种方式,现在比较流行的也是楼主这类的轻量级的定义方式。
楼主这样定义类,在给类属性赋值时,必须那个属性有个实际值,比如属性a的实际值是1,b的实际值是this.b。这就出现了问题,我当前有没有使用obj对象,我的this关键字也不能指向自己的对象实例啊,但是我得给b属性赋值啊,怎么办,this就会去搜索作用域,最后发现window对象可以用,然后就指向它了。
然后就是b:function(){return this.a;}这样为什么可以,因为给b属性赋值的是一个function对象,这个function只是定义了,然后赋给b但并未执行。当调用b时,this发现,我是在obj对象实例下调用的b方法,然后它就乖乖的指向obj对象了
学习了