我正在尝试打印出我的对象,但它似乎并没有起作用。我对编码非常陌生,我不确定我在这里做错了什么。请帮忙!
newtype Loc a = Loc (a,a) deriving (Show,Eq,Ord)
答案 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.getCoffeeType
是Coffee
类的每个实例都有的函数。此函数将能够访问类的this
变量(类成员)。
esspresso
和cappuccino
是Coffee
类的实例,在程序代码中的某个地方实例化(在类定义/构造函数/原型函数之外)。
然后,您可以在这些实例对象上调用类原型链上定义的函数。
上述代码的输出将为您提供来自西雅图的#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())