2015-11-06 136 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())