1.this的用法
看了一些网上的博客,总结下自己对this的看法。
对于初学者来说,this还是比较抽象的;
掌握一段时间后,最熟悉的还是this指代当前对象;
但是归根结底一句话:this指调用函数的那个对象;
1.函数调用
function aa(){
this.a = 1;
}
aa();//1
aa函数内定义了this.a;
在这里this.a=1;相当于a=1;
还是那个原则this指调用函数那个对象;
这里调用aa的是全局对象window;
this.a就相当于全局变量a
2.作为对象方法的调用
function aa(){
this.a = 1;
}
var o = {};
o.a = 1;
o.m = aa;
o.m();//1
这个例子中,将function aa给了o.m,当调用哦o.m时执行函数,这时,调用函数的是对象o,所以this.a 就是o.a;
3.作为构造函数调用
function aa(){
this.a = 1;
}
var A = new aa();
alert(A.a);//1
这个例子可能会跟第一个例子混淆;
要搞清这里的执行顺序:
var A = new aa();会是程序最先执行的。
先实例化了一个aa的实例A,
这时A继承了aa的所有属性,这里的new关键字以后还会说。
实际上就是将aa的所有方法放到A的上下文中执行,在A的上下文中,this.a就是指的是A,所以this.a 就是A.a
4.apply,call调用
JavaScript中的call,apply方法中都会经常使用this,
详细请参考
http://blog.youkuaiyun.com/u014267351/article/details/47668179
function parent(){
this.a = 1;
this.b = 2;
this.c = function(){
alert(this.a + this.b);
}
}
function child(){
parent.call(this);
}
var a = new child();
a.c();//3
这时JavaScript面试的一道经典考题,继承的两种方法。这时call方法继承。
child想继承从parent的所有方法,使用了call函数;
这里的this指的是本身,就是调用call的对象,意思是将parent的所有方法属性在自己的上下文中执行一次,使之成为自己的属性。