2012-05-20 59 views
0

我有以下Html文件與JavaScript。這給我錯誤,「testCircle是未定義的。」金德爾幫我解決這個問題。錯誤的Javascript:對象沒有定義

<html> 
    <body> 
    <h1> Testing Object-based Javascipt </h1> 
    <script type="text/javascript"> 
    function mycircle(x,y,r) 
    { 
    this.xcoord=x; 
    this.ycoord=y; 
    this.radius=r; 
    this.area = getArea; 
    this.getCircumference = function() { return (2 * Math.PI * this.radius) ; }; 
    } 
    function getArea() 
    { 
    return (Math.PI * this.radius * this.radius); 
    } 
     var testCircle = mycircle(3,4,5); 

    window.alert('The radius of my circle is ' + testCircle.radius); 

    </script> 

    </body> 
    </html> 

在此先感謝....

+2

..什麼'mycircle()'返回?沒錯('undefined') –

回答

5
var testCircle = mycircle(3, 4, 5); 

應該

var testCircle = new mycircle(3, 4, 5); 

構造函數是與new關鍵字調用。如果不使用關鍵字,則分配mycircle函數的返回值。並且由於mycircle不包含return語句,因此返回值爲undefined - 這就是您在代碼中分配給testCircle的內容。

0

我得到的錯誤是未定義的半徑。如果是這種情況。如果您計劃在不使用新構造函數的情況下使用它,則需要在mycircle的末尾返回它。如所見。

修復:斷開的鏈接

+1

這是創建對象的錯誤方法。在你的代碼中,'mycircle'在全局上下文中調用,所以'this'指向'window'。您將'xcoord,ycoord,...'等屬性附加到'window'對象並返回對其的引用。整個圓圈因此保留爲'window'的一組屬性,另一個調用'mycircle'將覆蓋它。 – Imp

+0

原諒我不完整的小提琴。假定該對象確實在本地作用域中創建。因爲我只是複製代碼並粘貼它們進行測試。它是爲了返回我的圈子。但你是對的。 –

+0

小提琴更新,以避免與其他用戶混淆(低頭)。 –