我们知道匿名函数指向的是window
但是如果我们想模拟面向对象的借口呢
那我们在函数中调用函数中声明的变量如何做?
这样?~
var a=123
function demo(){var a=11
return function(){
alert(this) //this指向window
return this.a
}
}
demo()() //最终出来的结果是123 ,很遗憾!
下面是改正的方法!
var a=123
function demo(){
var a=11
this.aa=function(){ //而我们在这为匿名函数绑定了一个this.aa方法模拟对象调用
alert(this) //而this现在指向的是object了! 为毛?往下看
return a
}
}
var d=new demo(); //原因在这因为这个匿名函数在没有被任何对象调用时 默认指向window,而我们声明这个对象后赋值给b
alert(d.aa()) //等于为this绑定了这个名字为d的调用方法,this所以就变成指向demo()了