你的問題涉及到變量作用域的問題。我們來各個擊破。首先看這段代碼: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對象并執行。