在javascript中this是一个关键字,this的指向跟它的使用场景有关,而且this的指向只有在它使用时才能确定,定义时是无法确认的。但总的来说,this指向的是调用函数的对象。在this的使用过程中有大概4种场景,具体如下。
var a = {
name: 'name',
fn:function(){
console.log(this.name)
}
}
a.fn() // this === a
a.fn.call({name:'addname'}) // this === {name:'addname'}
var fn1 = a.fn
fn1() // this === window
场景1:作为构造函数调用
function Foo(name){
this.name = name
}
var f = new Foo('path')
扩展:
new一个构造函数返回一个对象的过程:
1).把参数传到构造函数,如果没有参数的话就不用传到构造函数
2).首先把this变成一个空对象
3).属性的赋值
4).return this
这个时候返回的对象就具有构造函数的属性
this指向的时生成的新对象
场景2:作为对象属性进行调用
var obj = {
name:'A',
printName:function(){
console.log(this.name)
}
}
obj.printName()
this指向的是上级对象
场景3:作为普通函数进行调用
function fn(){
console.log(this) // 指向window
}
fn()
this指向的是window
场景4:call apply bind 进行调用
funtion fn(name){
console.log(name)
console.log(this)
}
fn.call({x:100},"name":"zhang") // this== {x:100}
this指向第一个参数。
总之,this的指向,只有在函数执行时才能确认,定义时是无法确认的。本文结