JavaScript对象不会打印

时间:2015-11-06 19:09:07

标签: javascript oop object

我正在尝试打印出我的对象,但它似乎并没有起作用。我对编码非常陌生,我不确定我在这里做错了什么。请帮忙!

newtype Loc a = Loc (a,a) deriving (Show,Eq,Ord)

3 个答案:

答案 0 :(得分: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类的实例,在程序代码中的某个地方实例化(在类定义/构造函数/原型函数之外)。

  • 然后,您可以在这些实例对象上调用类原型链上定义的函数。

  • 上述代码的输出将为您提供来自西雅图的#B;星巴克的Esspresso Blend Dark"

请注意,在prototype上定义函数的额外好处是,所有实例将共享相同的getCoffeeType函数,而不是在每个实例上具有单独的函数(它执行相同的操作)。 (见Use of 'prototype' vs. 'this' in JavaScript?)。如果你经营一家大型咖啡连锁店并生产数以百万计的咖啡,那么你可能会节省相当多的资源(即记忆)。

答案 1 :(得分: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) {
    ...

答案 2 :(得分: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())