一、this
this的指向大致可以分为以下几种:
- 作为对象的方法调用
- 作为普通函数调用
- 构造器调用
- Function.prototype.call或Function.prototype.apply
1.作为对象调用
当函数作为对象的方法被调用,this指向该对象:
var obj = { a:1, getA:function(){ alert(this === obj); //输出true alert(this.a); //输出1 } }; obj.getA();
当函数作为普通函数被调用,this指向全局对象(浏览器中指window对象)
window.name = 'globalName'; var getName = function(){ return this.name; } console.log(getName()); //输出:globalName 或者 window.name = 'globalName'; var muObject = { name: 'sven', getName: function(){ return this.name; } }; var getName = myObject.getName; console.log(getName()); //输出: globalName
构造器里的this指向返回的对象
var MyClass = function(){ this.name = 'sven'; }; var obj = new MyClass(); alert(obj.name); //输出:sven
call和apply动态的改变传入函数的this
var obj1 = { name: 'sven', getName:function(){ return this.name; } }; var obj2 = { name:'anne' }; console.log(obj1.getName.call(obj2)); //输出: ‘anne’