第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

javascript關(guān)于this的一個(gè)問題

javascript關(guān)于this的一個(gè)問題

慕虎7371278 2019-05-24 10:26:59
functionPerson(){this.say=function(){console.log("Hello");};}varperson=newPerson();person.say();這應(yīng)該是一個(gè)奇怪的問題,為什么可以通過person.say的方式訪問say方法。好像把this去掉,就不能正常輸出結(jié)果了。這個(gè)this有什么作用。我在判斷this指代誰的時(shí)候總會(huì)告訴自己誰調(diào)用指代誰,而這次,this直接出現(xiàn)在了say前面,我有點(diǎn)糊涂了,感覺自己沒辦法表達(dá)清楚自己的問題。
查看完整描述

2 回答

?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

先來看一段ES6class語法的例子
classPerson{
say(){
console.log("hello");
}
}
constperson=newPerson();
person.say();
上面這是采用class語法定義的Person類,它有一個(gè)say()方法。運(yùn)行效果和題主的代碼運(yùn)行效果一致,但本質(zhì)上還是有些區(qū)別。這段代碼里看不到this,而say()方法也不是定義在Person的每個(gè)實(shí)例對(duì)象上,而是定義在Person的原型對(duì)象中。
如果要把題主的代碼翻譯成class語法,應(yīng)該是這樣:
classPerson{
constructor(){
this.say=function(){
console.log("hello");
};
}
}
constperson=newPerson();
person.say();
這里出現(xiàn)了constructor,即構(gòu)造函數(shù)。構(gòu)造函數(shù)中,通過this指針對(duì)實(shí)例對(duì)象添加了一個(gè)say()方法。如果有多個(gè)實(shí)現(xiàn),每個(gè)實(shí)例都有自己的say()方法實(shí)例,雖然行為一樣,但卻是不同的對(duì)象,可以驗(yàn)證一下
classPerson{
constructor(){
this.say=function(){
console.log("hello");
};
}
}
constperson=newPerson();
constp2=newPerson();
console.log(person.say===p2.say);
//false
這里提到了構(gòu)造函數(shù)。在ES6以前,需要定義JavaScript類,就是通過構(gòu)造函數(shù)來定義的,然而實(shí)際上,構(gòu)造函數(shù)和普通函數(shù)在定義上并沒有多大區(qū)別,當(dāng)調(diào)用的時(shí)候使用了new運(yùn)算符,就是構(gòu)造,沒使用,就是普通函數(shù)參閱:JavaScript的this指向問題深度解析。
OOP語言在產(chǎn)生對(duì)象的時(shí)候一般都是這么一個(gè)過程:產(chǎn)生一個(gè)對(duì)象,從最遠(yuǎn)的基類開始依次調(diào)用變量初始化(如果有的話)和構(gòu)造函數(shù),所以調(diào)用構(gòu)造函數(shù)的時(shí)候,已經(jīng)存在對(duì)象,this指針已經(jīng)生效,可以在構(gòu)造函數(shù)中使用this指針。對(duì)于靜態(tài)語言來說,可以通過this指針訪問已經(jīng)定義的屬性,或者方法。而JavaScript是動(dòng)態(tài)語言,所以甚至可以使用this指針賦予它新的屬性,比如this.say=....,當(dāng)這個(gè)屬性是一個(gè)函數(shù)表達(dá)式的時(shí)候,就相當(dāng)于是在定義新的實(shí)例方法(非常確切的實(shí)例方法,每個(gè)實(shí)例一個(gè),各自不同)。
最后,既然是方法,那就可以使用對(duì)象.方法()的形式來調(diào)用,也就是person.say()。如果沒有定義,當(dāng)然也就不能調(diào)用了,也就是題主說的沒效果(實(shí)際應(yīng)該報(bào)錯(cuò))
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-24
  • 2 回答
  • 0 關(guān)注
  • 332 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)