【问题标题】:JavaScript object will not printJavaScript 对象不会打印
【发布时间】:2015-11-06 19:09:07
【问题描述】:

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

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));

【问题讨论】:

  • 你试过检查控制台错误吗?
  • CoffeeType 在您尝试访问它的位置不存在。您的意思是将} 放在this.location = location; 之后而不是document.write 之前?打电话给Coffee 本身没有多大意义。 CoffeeType 也不需要任何参数,并且没有名称为 coffee 的变量。总的来说,这似乎是任意缝合在一起的。你在关注哪个教程?我建议改为阅读eloquentjavascript.net
  • 有一些关于范围的文献! toddmotto.com/…
  • 我没有使用教程...只是想自己解决问题...感谢您的洞察力!
  • “它似乎不起作用” 不是一个足够好的问题陈述。

标签: javascript oop object


【解决方案1】:

如果您想采用面向对象的方法,您应该在 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 类的实例,在程序代码的某处(类定义/构造函数/原型函数之外)实例化。

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

  • 以上代码的输出将为您提供“来自西雅图的 Starbuck's Esspresso Blend Dark”

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

【讨论】:

  • 哇!非常感谢您的深入解释。你不知道我有多感激!
【解决方案2】:

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) {
    ...

【讨论】:

    【解决方案3】:

    试试这个:

    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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多