亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解決js在innerHTML之后找不到對象?

如何解決js在innerHTML之后找不到對象?

手掌心 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();//這樣的代碼,在點擊hello時,會找不到obj對象。//請問有什么方法可以將obj對象傳給已經被innerHTML的對象?
查看完整描述

2 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號