编程语言中的this一直是变化莫测,让人捉摸不定,最后就被困住,沦陷了.....多么痛的领悟啊可是我们还是无法避开它,好吧,那就让我们把它细细地分析一番(知己知彼)吧。
全局作用域,在浏览器中,window既是通过Javascript访问浏览器窗口的一个接口,也是ECMAScript中的Global对象,这就意味着在全局作用域中定义的变量,函数都会变成window的属性和方法,所以在全局中变量,函数,对象中的this
var a = "mary";
console.log(window.a); //Mary
function abc(){return this; }
alert(abc()===window);//true
这时的this指向window
当函数做为某个对象的方法进行调用时,this指向该对象
var object = {
name : "my name",
getName : function(){
return function(){
return this.name;
};
}
};
alert(object.getName());//my name
对象原型链上的this
var o = {f:function(){return this.a+this.b;}}
var p = Object.create(o);
p.a = 1;
p.b = 2;
console.log(p.f());//3
通过Object.create()或者构造器实例化后的对象,会有prototype属性指针,该指针指向该实例对象的原型,即构造函数.prototype,原型默认的属性包括constructor和_porto_,constructor指向构造函数本身,_proto_指向构造函数.prototype,当p调用f函数时,this指向o.prototype
构造器中this
function addClass(){
this.a = 37;
}
var o = new addClass();
console.log(o.a);//37
function addClass(){
this.a = 37;
return {a:38;}
}
var o = new addClass();
console.log(o.a);//38