2014-07-01 138 views
-4

我在Codecademy上學習Javascript,並試圖創建一個函數,告訴我矩形的周長。已經上來的錯誤是:Javascript類型錯誤:未定義不是函數

SyntaxError: Unexpected end of input 

我的代碼是:

function Rectangle(height, width) { 
    this.height = height; 
    this.width = width; 
}; 
    this.calcArea = function() { 
     return this.height * this.width; 
    }; 
    // put our perimeter function here! 
    this.calcPerimeter = function() { 
     return this.height * 2 + this.width * 2; 
    }; 
var rex = new Rectangle(7,3); 
var area = rex.calcArea(); 
var perimeter = rex.calcPerimeter(); 

任何幫助/諮詢不勝感激,謝謝:)在錯誤的地方

+0

爲什麼您的問題標題是與問題中的錯誤消息不匹配的錯誤消息?你真的得到了什麼錯誤? – geoffspear

+0

「'尋求調試幫助的問題(」爲什麼代碼不工作?「)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。對其他讀者沒有用處。「 – Teemu

回答

0

您有密切的Rectangle類。

與您的代碼問題是calcPerimetercalcAreaRectangle類之外。所以當你執行rex.calcArea();這個函數時undefined。

使用

function Rectangle(height, width) { 
    this.height = height; 
    this.width = width; 
    //}; removed from here 
    this.calcArea = function() { 
     return this.height * this.width; 
    }; 
    this.calcPerimeter = function() { 
     return this.height * 2 + this.width * 2; 
    }; 
}; //Place closing brace here 

var rex = new Rectangle(7, 3); 
var area = rex.calcArea(); 
var perimeter = rex.calcPerimeter(); 
1

this.calcareathis.calcperimeter是矩形的範圍之外。你需要它們在Rectangle對象的括號內成爲成員函數。像這樣:

function Rectangle(height, width) { 
    this.height = height; 
    this.width = width; 

    this.calcArea = function() { 
     return this.height * this.width; 
    } 
    // put our perimeter function here! 
    this.calcPerimeter = function() { 
     return this.height * 2 + this.width * 2; 
    } 
} 
0

你需要使用

Rectangle.prototype,如下:

function Rectangle(height, width) { 
    this.height = height; 
    this.width = width; 
} 
Rectangle.prototype.calcArea = function() { 
     return this.height * this.width; 
}; 
Rectangle.prototype.calcPerimeter = function() { 
     return this.height * 2 + this.width * 2; 
    }; 
var rex = new Rectangle(7,3); 
var area = rex.calcArea(); 
var perimeter = rex.calcPerimeter(); 

這會爲Rectangle類創建Method

在你的代碼,你的方法area()perimeter指的是this對象,在這種情況下是指向window。所以這是沒用的。使this指向Rectangles對象。您需要使用Rectangle.prototype.methodName=function(){//Here this =Rectangle Obj };

className.prototype.methodName 

在JavaScript創建public方法(方式),它可以是由該類的objects訪問。

DEMO

希望它有助於! :)!

相關問題