2015-11-06 182 views
0

我想打印出我的對象,但它似乎並沒有工作。我對編碼很陌生,不確定我在這裏做錯了什麼。請幫忙!JavaScript對象不會打印

function Coffee(name, roast, location) { 
    this.name = name; 
    this.roast = roast; 
    this.location = location; 

    var esspresso = new Coffee("Starbuck's Esspresso Blend", "Dark", "Seattle"); 
    var cappuccino = new Coffee(coffee.name(espresso), "Dark", "Seattle"); 

    var CoffeeType = function() { 
     return coffee.name + " " + coffee.roast + " from " + coffee.location; 
    }; 
} 
document.write(CoffeeType(cappuccino)); 
+0

您是否嘗試過檢查控制檯錯誤? – arcyqwerty

+4

您嘗試訪問它的地方不存在CoffeeType。你的意思是把'}放在'this.location = location;'後面而不是'document.write'之前?自己調用「咖啡」本身並沒有多大意義。 'CoffeeType'也不期望任何參數,並且沒有名稱爲'coffee'的變量。總的來說,這似乎是任意縫合在一起的。你正在關注哪個教程?我建議閱讀http://eloquentjavascript.net/。 –

+0

有關於範圍的一些文獻! http://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/ – Xogle

回答

3

如果你拍攝一個面向對象的方法,你應該定義你的功能在prototype鏈上。

function Coffee(name, roast, location) { 
    this.name = name; 
    this.roast = roast; 
    this.location = location; 
} 

Coffee.prototype.getCoffeeType = function() { 
    return this.name + " " + this.roast + " from " + this.location; 
}; 

var esspresso = new Coffee("Starbuck's Esspresso Blend", "Dark", "Seattle"); 
var cappuccino = new Coffee(esspresso.name, "Dark", "Seattle"); 

document.write(cappuccino.getCoffeeType()); 

上面的代碼將具有以下效果:

  • function Coffee(...)是類的主要構造。

  • Coffee.prototype.getCoffeeTypeCoffee類的每個實例都具有的功能。這個函數將能夠訪問類(類成員)的this變量。

  • esspressocappuccinoCoffee類的實例,在程序代碼中的某處實例化(外的類定義/構造/原型函數)。

  • 然後,您可以調用這些實例對象上類的原型鏈上定義的函數。

  • 上述代碼的輸出會給你

注「星巴克Esspresso從西雅圖混合黑暗」,關於prototype定義一個函數的另一個好處是,所有實例將共享相同的getCoffeeType函數,而不是在每個實例上都有一個單獨的函數(它會做同樣的事情)。 (見Use of 'prototype' vs. 'this' in JavaScript?)。如果你經營一個大型咖啡連鎖店並生產數以百萬計的咖啡,那麼你可能會節省相當數量的資源(即記憶)。

+0

哇!謝謝大家的深入解釋。你不知道我多麼感激! –

1

CoffeeType僅被定義在Coffee的範圍,並且不能在{}之外使用。您還需要傳入coffee作爲參數才能使用它。 var CoffeeType = function(coffee) {

改變你的程序在一個較高的範圍界定CoffeeType所以它可以Coffee的身體外使用:

function CoffeeType(coffee) { 
    return coffee.name + " " + coffee.roast + " from " + coffee.location; 
}; 

function Coffee(name, roast, location) { 
    ... 
1

試試這個:

function Coffee(name, roast, location) { 

    this.name = name; 
    this.roast = roast; 
    this.location = location; 
    this.CoffeeType = function() { 
     return this.name + " " + this.roast + " from " + this.location; 
    }; 

} 

var esspresso = new Coffee("Starbuck's Esspresso Blend", "Dark", "Seattle"); 
var cappuccino = new Coffee("espresso", "Dark", "Seattle"); 

console.log(esspresso.CoffeeType())