js中的this对象运行实例讲解
this对象是运行时基于函数的执行环境绑定的;
在全局函数中:
this等于window
当函数作为某个对象的方法调用时,this等于那个对象,不过匿名函数的执行环境具有全局性,因此this对象通常指向window。
var name=" the window"
var object={
name:"my object"
getnamefunc:function(){
return function(){,
return this.name
};
}
};
alert(object.getnamefunc()());//"the window"
结果是“the window”的原因是每个函数在被调用时都会自动取得两个特殊变量:this和argument。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数的这两个变量。
解决办法一:把外部作用域中的this对象保存在一个闭包能够访问到的变量里,就可以让闭包访问该对象
getnamefunc:function(){
var that=this //定义一个that变量,将this对象赋值给that变量
return function(){
return this.name
};
定义了闭包之后,闭包也可以访问这个变量,因为它是我们在包含函数中特意声明的一个变量。函数返回之后,that也仍然引用着object。
解决办法二:箭头函数
getnamefunc:function(){
return ()=> this.name
}
箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定