一、纯粹的函数调用
函数最普通用法,此时属于全局调用,函数内this指向全局对象window。
var x=20;
function test(){
var x = 10;
console.log(this.x)
}
输出:20,因为函数test执行环境为window。
var x=20;
function test(){
this. x = 10;
console.log(this.x)
}
test()
console.log(x);
输出:10,由于test函数内部this指向window,所以第3行代码修改了x的值。
二、作为对象的方法使用
函数作为某个对象的方法,此时this指向该对象。
function text(){
console.log(this.x)
}
var obj = {};
obj.x = 10;
obj.out = text;
obj.out()//10
三、构造函数生成实例对象
作为构造函数使用时,this指向该对象新创建的实例。
var x = 2;
function text(){
this.x =1;
}
var inst = new text();
console.log(inst.x);//1
四、使用apply、call、bind
apply(),call()方法是改变函数内部this的值,若为空默认是指向全局对象window。
var x = 2;
function test(){
console.log (this.x);
}
var obj={};
obj.x = 1;
obj.m = test;
obj.m.apply();//2,默认指向window
obj.m .apply (obj);//1,this指向obj
五、事件处理程序中的this
在DOM级事件处理程序中this指向触发事件的元素,而对于IE事件来说,this指向全局对象window。
HTML:
<input id="myinput" type="text" value="javascript中onclick中的this" onclick=" test(this);"/>
javaScript:
function test(obj){
alert(obj); //[object HTMLInputElement]
alert(obj.id); //myinput
alert(obj.value); //javascript中onclick中的this
}
网友评论