javascript的this的几种使用情况

来源:互联网 发布:ubuntu root中文 编辑:程序博客网 时间:2024/06/06 03:15

情况一:
function Fn(){
this.name=”毛毛虫”;
this.year=”1989”;
console.log(this) // Fn{name:”毛毛虫”,year:”1989”}
}
var fn=new Fn();
console.log(fn.name); //毛毛虫
console.log(fn.year); //1989
以上代码中,如果函数作为构造函数用,那么其中的this就代表它即将new出来的对象。
注意,以上仅限new Fn()的情况,即Fn函数作为构造函数的情况。如果直接调用Fn函数,而不是new Fn(),情况就大不一样了。
function Fn(){
this.name=”毛毛虫”;
this.year=”1989”;
console.log(this) // Fn{name:”毛毛虫”,year:”1989”}
}
Fn() //window
情况二
函数作为对象的一个属性
var fn={
name:”毛毛虫”,
year:1989,
showName:function(){
console.log(this.name);
}
}
fn.showName() //毛毛虫
以上代码中,showName不仅作为一个对象的一个属性,而且的确是作为对象的一个属性被调用。结果this就是fn对象。
注意,如果showName函数不作为fn的一个属性被调用,会是什么结果呢?
var fn={
name:”毛毛虫”,
year:1989,
showName:function(){
console.log(this.name);
}
}
var f1=fn.showName;
f1(); //undefined
情况三
使用call或apply
var obj={
x:1
}
function fn(){
console.log(this) //obj{x:1}
console.log(this.x); //1
}
fn.call(obj)
情况四
var obj={
x:10,
fn:function(){
f1:function(){
console.log(this); //window
console.log(this.x); //undefined;
}
f1();
}
}
obj.fn();

原创粉丝点击