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

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

如何解決js在innerHTML之后找不到對(duì)象?

如何解決js在innerHTML之后找不到對(duì)象?

手掌心 2019-04-23 15:36:08
varobj=function(){this.hello=function(){alert("hello");}}varaPage=function(){vartest=document.getElementById("test");varobj=newobj();test.innerHTML="hello";}aPage();//這樣的代碼,在點(diǎn)擊hello時(shí),會(huì)找不到obj對(duì)象。//請(qǐng)問(wèn)有什么方法可以將obj對(duì)象傳給已經(jīng)被innerHTML的對(duì)象?
查看完整描述

2 回答

?
千萬(wàn)里不及你

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

你的問(wèn)題涉及到變量作用域的問(wèn)題。
我們來(lái)各個(gè)擊破。
首先看這段代碼:
varaPage=function(){
vartest=document.getElementById("test");
varobj=newobj();
test.innerHTML="hello";
}
你的目的是想new一個(gè)obj對(duì)象的實(shí)例。
由于變量的聲明會(huì)被提前到函數(shù)執(zhí)行前。你這段代碼實(shí)際上是
varaPage=function(){
varobj,test;
test=document.getElementById("test");
obj=newobj();
test.innerHTML="hello";
}
當(dāng)你嘗試new的時(shí)候,obj實(shí)際上是undefined。當(dāng)你嘗試對(duì)undefined進(jìn)行new操作的時(shí)候,會(huì)出錯(cuò)。這個(gè)是第一個(gè)錯(cuò)誤。
假設(shè)你修復(fù)了第一個(gè)錯(cuò)誤,aPage函數(shù)里面的obj是你想要的那個(gè)對(duì)象的實(shí)例之后,我們繼續(xù)看。
test.innerHTML="hello";
這段代碼會(huì)把一段html文本塞到DOMtree里面。onclick這種調(diào)用方式屬于0級(jí)DOM事件。這種事件句柄中,查找變量的作用域鏈?zhǔn)菑谋竟?jié)點(diǎn)至其父節(jié)點(diǎn)一直延伸到window。而你的aPage函數(shù)并不在該作用域鏈上。但同時(shí),你的window下有一個(gè)變量obj,此時(shí)會(huì)查找到該變量。
此時(shí),onclick后的obj對(duì)象是window下的obj,而非你在aPage函數(shù)中new的對(duì)象。
但是window下的obj在實(shí)例化之前是不包含hello方法的。所以你調(diào)用obj.hello()的時(shí)候會(huì)報(bào)錯(cuò)。這個(gè)是第二個(gè)錯(cuò)誤。
為了解決這個(gè)問(wèn)題,推薦使用2級(jí)DOM事件。
例如
varOBJ=function(){
this.hello=function(){
alert("hello");
}
}
varaPage=function(){
vartest=document.getElementById('test');
varobj=newOBJ();
test.addEventListener('click',function(){obj.hello()});
}
此時(shí)當(dāng)點(diǎn)擊時(shí),事件函數(shù)可以在作用域鏈中找到正確的obj對(duì)象并執(zhí)行。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-23
  • 2 回答
  • 0 關(guān)注
  • 292 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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