javascript中的'this'
最近工作和看书时遇到了很多js中'this',觉得有必要梳理一下。
1.在全局作用域中使用时,this就指向全局对象window。
var name='aaa'; alert(this.name); //aaa alert(window.name); //aaa alert(this===window); //true
2.当在全局作用域中定义一个函数,在函数中使用this,此时函数执行的环境对象是全局对象window,所以this也指向window。
var name='aaa'; function sayName(){ alert(this.name); //aaa alert(window.name); //aaa alert(this===window); //true } sayName();
3.当然也可以通过函数的apply或call方法将函数中的this指向其他的作用域(环境对象)。
var obj={name:'bbb'} var name='aaa'; function sayName(){ alert(this.name); //bbb alert(this===window); //false alert(this===obj); //true } sayName.apply(obj);
当改变了sayName的作用域时,this对象也跟着指向了sayName的作用域obj,所以此时this指向obj。
4.当函数作为构造函数使用时,在构造函数中使用this,则this指向的是通过构造函数创建出来的新的对象。
function Student(name){ this.name=name; } var stu1=new Student('abc');
alert(stu1.name); //abc
使用构造函数创建对象时,首先会创建一个新的对象,然后会将构造函数的作用域赋给新对象,因此this就指向了新的对象。
5.当函数作为一个对象的方法时,在函数中使用this,此时this指向了这个对象。
var Student={ name:'abc', sayName:function(){ alert(this.name); //abc alert(this===Student); //true } } Student.sayName();
6.当在对象的方法中调用嵌套方法时,this指向全局对象(非严格模式)或undefined(严格模式)
var o={ fun:function(){ console.log(this===o); //true f(); function f(){ console.log(this===o); //false console.log(this===window); //true } } }
嵌套的函数不会从调用它的函数中继承this.
总结:this引用的是函数据已执行的环境对象。