繼續(xù)說一下面向對象開發(fā)。
下面我簡單說一下this的指向問題
this在js中主要研究的是函數中的this**
console.log(this); //打印出來的是window
表明崎岂,不代表函數外沒有this 函數外的this=>window
js中的this代表的是當前行為執(zhí)行的主體(行為:方法霎褐,事件,函數等)
function eat(){ //這是函數的定義
this 指向 jam
}
jam.eat(); //執(zhí)行
在js中還有一個概念叫 context(上下文)该镣,代表當前行為執(zhí)行的環(huán)境冻璃。eg:在飯店吃飯
主體:jam this:jam
context:飯店(環(huán)境可以不同 但不影響this的指向)
由此可以得出,this的指向只跟當前執(zhí)行的主體有關系损合,跟行為在哪發(fā)生沒有關系省艳。
行為主體怎么判斷?
函數執(zhí)行首先看函數名有沒有“.”嫁审,有的話看“.”前面是誰跋炕,是誰就指向誰,沒有“.”的話律适,this就指向window辐烂。
1)
function fn(){
console.log(this);
}
fn(); //window
根據上面的判斷,這個this沒有“.”捂贿,由此可以推斷它是指向window的
var obj = {fn:fn}; //fn的屬性是上面的fn函數
obj.fn(); //會調用上面的函數
//Object
根據判斷纠修,前面有“.”,所以這個this指向的是obj【執(zhí)行前把上面fn()調用的注釋】
2)
function fn(){
console.log(this);
}
function sum(){
fn();
}
sum(); //this=>window
this前面沒有“.”厂僧,只是換了個環(huán)境執(zhí)行扣草,所以還是沒有主體,所以是指向window的
3)
function fn(){
console.log(this);
}
var oo = {
sum:function(){
fn();
}
}
oo.sum(); //this=>window
4)
html:
<button>按鈕</button>
js:
var oBtn = document.getElementsByTagName("button")[0];
oBtn.onclick = function(){
console.log(this);
} // 點擊按鈕打印出來的是 <button>按鈕</button>
5)
var obj = new Object();
obj.say = function(){
console.log(this);
}
obj.say(); //Object
通過4)5)可以看出來,函數里面的this指向誰辰妙,只跟函數在運行時前面有沒有“.”鹰祸,有就指向前面的,沒有就指向window
以上是我理解和整理的一些看法和總結密浑,以后還會多多學習蛙婴,謝謝。