首页 > 解决方案 > 控制台输出根据定义类型改变行为

问题描述

Product用不同的方法定义了两个对象并将它们添加到products数组中。当我想转储products数组的内容时。我意识到了一些有趣的事情。

class Product {
    constructor(public id?: number, public name?: string, public category?: string, public price?: number) { }
}

let products: Array<Product> = new Array<Product>();
let newProduct: Product = { id: 1, name: "Iphone 6", category: "Telephone", price: 4000 };
let newProduct2: Product = new Product(2, "Iphone 5", "Telephone", 5000);

products.push(newProduct);
products.push(newProduct2);
console.log(products);

控制台输出为:

[
  { id: 2, name: 'Iphone 6', category: 'Telephone', price: 4000 },
  Product {
    id: 3,
    name: 'Iphone 5',
    category: 'Telephone',
    price: 5000
  }
]

控制台行为取决于定义的类型。毕竟,对象属于同一类。这种行为背后的原因是什么?

标签: typescript

解决方案


它们都是对象,但它们不一样——不是, while isnewProduct的实例,因为后者是使用类实例化的:ProductnewProduct2Product

console.log(newProduct instanceOf Product);  // false
console.log(newProduct2 instanceOf Product); // true

控制台日志看起来“不同”的原因只是因为控制台还会记录实例化对象的类的名称。


推荐阅读