this
这个this根据官方的解释是面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
在全局对象window中
在全局对象window中下的属性都可以通过this直接调用;
var a = 10;s
console.log(this.a);
只要在window下的属性,都可以通过this.属性名(变量名)调用
而根据指向性的下也可判断是指向window的。
通过一个对象的属性调用
.作为对象方法调用,this 指代上级对象
var obj={
s:function(){
console.log(this)
}
}
obj.s();
《高级程序设计-第三版》资料
关于this补充内容
var name = "The Window"; //创建一个全局变量name;
var object = {
name : "My Object", //创建一个对象中包含name的属性
getNameFunc : function(){ //创建一个方法
return function(){//由于返回值也是个方法
return this.name;
};
}
};//所以最后返回this.name//window中找name这个变量
alert(object.getNameFunc()()); //"The Window"
每个函数在被调用时都会自动取得两个特殊的变量this和arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量不过,把外部作用域中的 this 对象保存在一个闭包能够访问 到的变量里,就可以让闭包访问该对象了
var name = "The Window"; //创建一个全局变量name;
var object = {
name : "My Object", //创建一个对象中包含name的属性
getNameFunc : function(){ //创建一个方法
var that = this;//把外部作用域中的 this 对象保存在变量里//这里this是指向object
return function(){//由于返回值也是个方法
return that.name;
};
}
};//由于已经保存this这个变量,访问到时闭包里面的name;
alert(object.getNameFunc()()); //"My Object"
改变this的指向性问题
在js中改变this指向性有三种解决方案
call(),aplly(),bind(),
它们之间既有相似之处也有不同之处。
相同之处
1.都是用来改变函数的this对象的指向的
2.第一个参数都是this要指向的对象
3.都可以利用后续参数传参
区别
1.call和apply都是对函数的直接调用(也叫直接执行函数),而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以(将上下文绑定到bind()括号中的参数上,然后将它返回)。所以,bind后函数不会执行,而只是返回一个改变了上下文的函数副本。
2.call和apply都可以传参数。call后面的参数与fn方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和fn方法中一一对应的,这就是两者最大的区别。
3.bind是ES5中的方法,可以向call一样传参,也可以在调用的时候再进行传参。