2014-03-29 82 views
-1

所以,我是JS的新手,我有一些對象方法的問題。 建築物對象原型中的方法buy()應該做我爲之定義的方法,但它會顯示「未定義」。javascript對象方法undefined

var bitcoins=9000; //for example 
var bitcoinsps=0; 
    function building(price, bps, name) { 
    this.price = price; 
    this.bps = bps; 
    this.name = name; 
    this.amount = 0; 
} 
building.prototype.buy = function buy() { 

    if (bitcoins >= building.price) { 
     amount++; 
     bitcoins -= price; 
     price *= 1.15; 
     bitcoinsps += bps; 
    } 
}; 

注意:是的,我確實創建了一個實例。

我在調用變量時嘗試過「building.blabla」和「this.blabla」,但沒有任何反應。哪裏不對?

編輯:我的新代碼:

var bitcoins = 0; 
var bitcoinsps = 0; 
var build = new Array(); 

function building(price, bps, name) { 
    this.price = price; 
    this.bps = bps; 
    this.name = name; 
    this.amount = 0; 

} 
building.prototype.buy = function() { 

    if (bitcoins >= building.price) { 
     this.amount++; 
     bitcoins -= this.price; 
     this.price *= 1.15; 
     bitcoinsps += this.bps; 
    } 
}; 
    build[1] = new building(70, 1, "Junky laptop"); 
    build[2] = new building(300, 4, "Average PC"); 
    build[3] = new building(1000, 15, "Gaming PC"); 
    build[4] = new building(5000, 70, "Dedicated Hardware"); 
    build[5] = new building(24000, 300, "Small cluster computer"); 
    build[6] = new building(100000, 1000, "Medium cluster computer"); 
    build[7] = new building(500000, 4500, "Large cluster computer"); 
+2

您不明白javascript是如何工作的,請閱讀該書:http://eloquentjavascript.net/並重試。如果您對其核心概念沒有基本的瞭解,則不能使用該語言。 – mpm

回答

2

買()必須使用this.blabla。所以,改變它的實現是這樣的:

building.prototype.buy = function buy() { 
    if (bitcoins >= this.price) { 
     this.amount++; 
     bitcoins -= this.price; 
     this.price *= 1.15; 
     bitcoinsps += this.bps; 
    } 
}; 

此外,你必須使用「新」來創建一個建設實例。例如:

var b = new building(1, 2, 'fred'); 
b.buy(); 
+0

我已經創建了一個實例,只是不在代碼中。 – Bary12

+0

好的,請嘗試運行我的解決方案。 – cybersam

+0

沒有工作,你有任何其他建議嗎? – Bary12

1

您不需要重新聲明方法名稱;下面的代碼:

building.prototype.buy = function(){ 
    // function body 
} 

將創建building對象的實例函數buy。要使用它,你需要創建的building一個實例:

var b = new building(/*params*/); 
b.buy(); 

此外,正如cybersam指出的那樣,building類的任何成員變量的使用需要使用this關鍵字。

+0

我已經創建了實例。我只展示了部分代碼。 – Bary12