0.前言
最近北京霧霾挺嚴重的挚币,希望程序員們注意身體啊?鄣洹W北稀!好了進入正題吧贮尖,我們在敲代碼中笛粘,常常會用到this,那么問題就來了湿硝,有時候你想的this應(yīng)該指的是什么薪前,但往往有的時候會和你想的不一樣,那么我們接下來就來看一下在不同的地方使用this代表的是什么意思.....
1.this定義
this 定義:this是包含它的函數(shù)作為方法被調(diào)用時所屬的對象关斜。
2.this的使用地方
1 普通場景下的函數(shù)this代表window
2 構(gòu)造函數(shù)中this代表新對象
3 對象內(nèi)部的函數(shù)屬性示括,函數(shù)內(nèi)this表示當(dāng)前對象
4 事件處理函數(shù),this表示當(dāng)前dom對象
5 call()與apply() this表示第一個參數(shù)
3.代碼實現(xiàn)
3. 1.1普通函數(shù)
在普通函數(shù)中this代表的是window蚤吹。
//1.普通函數(shù)
function f1(){
console.log(this);//輸出window
}
f1(); ```
3.1.2字面量方式創(chuàng)建一個匿名函數(shù)
在這個用字面量方式創(chuàng)建一個匿名函數(shù)中this也代表了window例诀。
//2.字面量方式創(chuàng)建一個匿名函數(shù)
var f2 = function(){
console.log(this);//輸出window
};
f2();
3.2構(gòu)造函數(shù)中的this代表新對象
Duang~~在構(gòu)造函數(shù)中this代表了Liu實例出來新的對象p随抠。
//構(gòu)造函數(shù)中this代表新對象
function Liu(age,color,making){
this.age = age;
this.color = color;
this.making = making;
console.log(this);//輸出Liu {age: 18, color: "yellow", making: "wood"}
}
var p = new Liu(18,"yellow","wood");
console.log(p);//輸出Liu {age: 18, color: "yellow", making: "wood"}
3.3對象內(nèi)部的函數(shù)屬性裁着,函數(shù)內(nèi)this表示當(dāng)前對象
//3對象內(nèi)部的函數(shù)屬性,函數(shù)內(nèi)this表示當(dāng)前對象
var person={
name:"Mr_Liu",
age:16,
say:function(){
console.log("我叫"+this.name);
console.log(this);//輸出 Object {name: "Mr_Liu", age: 16}
}
}
person.say();
3.4事件處理函數(shù)拱她,this表示當(dāng)前DOM對象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>關(guān)于this,關(guān)于你</title>
</head>
<body>
<input type="button" id="btn1" value="按鈕">
<script type="text/javascript">
//4 事件處理函數(shù)二驰,this表示當(dāng)前dom對象
document.getElementById("btn1").onclick = function(){
console.log(this);//輸出 <input type="button" id="btn1" value="按鈕">
}
</script>
</body>
</html>
在事件處理函數(shù)中,首先秉沼,咱們得獲取到按鈕這個節(jié)點桶雀,然后給按鈕添加一個點擊事件矿酵,當(dāng)我們點擊按鈕的時候疲憋,事件處理函數(shù)中this代表的是DOM對象 <input type="button" id="btn1" value="按鈕">
這個標(biāo)簽叹侄。
3.5 call() 與apply() 中的this代表第一個參數(shù)
var per1 = {
name:"二雷",
say: function(p1, p2){
console.log("Hi, " + p1 + " and " + p2 + ", My name is " + this.name);
},
};
per1.say("lilei", "hanmeimei");
var per3 = {
name: "三雷",
};
per1.say.call(per3, "lilei", "hanmeimei");//輸出 Hi, lilei and hanmeimei, My name is 三雷
per1.say.apply(per3, ["lilei","hanmeimei"]);//輸出 Hi, lilei and hanmeimei, My name is 三雷
每個函數(shù)都有call() 和apply() 方法:
1、他們可以出觸發(fā)函數(shù)盐捷,并設(shè)置參數(shù)
2棘捣、讓一個對象去借用另一個對象的方法辜腺,讓另一個對象的方法為己所用
在上面咱們可以看出要想讓per3借用per1里面的方法為自己作用,我們就想起來用call() 和apply()的方法乍恐,當(dāng)我們per1調(diào)用say() 方法的時候this.name打印出來的是二雷,而當(dāng) per3用call()或apply()借用per1里面的say() 方法的時候评疗,this.name打印出來就是咱們調(diào)用call()和apply()里面?zhèn)魅氲牡谝粋€參數(shù)per3里面的三雷,那么結(jié)果就出來了茵烈,call() 與apply() 中的this代表第一個參數(shù)百匆。
apply與原理與call相似,不同之處在于給函數(shù)傳遞的參數(shù)的方式不一樣呜投。
4.后記
本文到這里也就結(jié)束了加匈,最后我希望我寫的文章對你有所幫助,如果你喜歡就帶走吧V姹搿>囟!點贊释漆,分享悲没。