this的運用場景有以下幾個:
1.函數(shù)調(diào)用
2.對象的方法調(diào)用
3.構(gòu)造函數(shù)調(diào)用
4.call和apply調(diào)用
一、函數(shù)調(diào)用
window.word='you are my Mr Right'
function aa(){
console.log(this.word)
}
function bb(){
var word = 'you no my Mr Right'
aa();
}
bb();
運算結(jié)果是 you are my Mr Right。
可以看到當作為函數(shù)調(diào)用時,this指向的是window對象。
二、對象方法調(diào)用。
var car = {
name : "BMW",
price : "200000",
showName:function(){
console.log(this.name);
},
showPrice:function(){
console.log(this.price)
}
}
car.showName();
car.showPrice();
運算結(jié)果是: BMW 200000
可以看到,當作為對象方法調(diào)用時,this指向的是該方法所在對象本身。
三、構(gòu)造函數(shù)調(diào)用
構(gòu)造函數(shù)和普通函數(shù)一模一樣,區(qū)別在于調(diào)用方式,當用new運算符調(diào)用時,函數(shù)會返回一個對象,構(gòu)造器的this指向當前返回的對象。
function Car(){
? this.name="baoma",
? this.price="20000"
? this.showPrice= function(){
? ?console.log(this.price);
}
}
var car = new Car();
car.showPrice();
運算結(jié)果是20000.
由此可知,這里的this指的是car這個對象。
四、call 和apply
function Car(){
? console.log(this.name);
}
var bmw={
? name:"bmw",
? showName:function(){
? ?Car.apply(this);
}
}
bmw.showName();
運算后得到:bmw.
這里通過apply(call也可以)強制把this指向了bmw這個對象。