建立函数时,系统会(在后台)建立一个名为 this 的关键字,它连接到运行该函数的对象。函数
var person = { name:'adhehe', age:23, getName:function(){
// return person.name return this.name } } //person.getName() 输出adhehe
this 值会被传递给全部函数,其值基于在运行时调用函数的上下文。this
var a = 1; var o = { a:2 } var func = function(){ return this['a'] } o.func = func; o.func() //输出2 func() //输出1
在嵌套函数中使用this关键字,引用head对象(即window)spa
var o = { func1:function(){ console.log(this) //输出o var func2 = function(){ console.log(this) //输出window,今后处开始this都是window对象 var func3 = function(){ console.log(this) //输出window }() }() } }
o.func1()
当匿名函数在函数内部调用时,匿名函数内的this值将是对head对象的引用(即window)prototype
var o = { func1:function(func){ func(); //输出window console.log(this) //输出o } } o.func1(function(){ console.log(this) })
能够简单地在父函数中使用做用域链来保留对 this 的引用。code
var o = { func1:function(){ var that = this; console.log(this) //输出o var func2 = function(){ console.log(that) //输出o var func3 = function(){ console.log(that) //输出o }() }() } } o.func1()
使用 new 关键字调用函数时,this 值引用实例自己。对象
原型方法内的this关键字引用构造函数实例,即在prototype对象中的方法内部使用this关键字时,this可用于引用实例。若是该实例不包含所要查找的属性,则继续在原型上查找。blog