猿问

为什么objAge 能调用this.age,但是得到的是undefined?

var name='小王',age=17;
var obj={
name:'小张',
objAge:this.age,
myFun:function(){
console.log(this.name+'年龄'+this.age)
}

}

obj.myFun();
为什么objAge 能调用this.age,myFun:function(){} 里调用this.age得到是undefined?

翻阅古今
浏览 226回答 1
1回答

月关宝盒

因为这里的两个this并不是指向同一个对象,objAge:this.age, //这个this是指windowconsole.log(this.name+'年龄'+this.age) //这里的两个this是指obj如果改成console.log(this.name+'年龄'+this.objAge)那就没问题了。this是指调用者,也就是说谁调用自己的那么谁就是this。objAge:this.age, 这里是对象属性值的直接赋值,程序运行到这里的时候,调用者仍然是最顶层对象也就是windowmyFun:function(){ 而这里则是声明对象的一个方法,function里面的代码并不是立即执行的。obj.myFun(); 这个时候就是对对象obj的方法myFun进行调用了,调用者毫无疑问就是obj对象,那么上述function内代码中的this就变成obj了。
随时随地看视频慕课网APP
我要回答