typescript - 控制台输出根据定义类型改变行为
问题描述
我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
}
]
控制台行为取决于定义的类型。毕竟,对象属于同一类。这种行为背后的原因是什么?
解决方案
它们都是对象,但它们不一样——不是, while isnewProduct
的实例,因为后者是使用类实例化的:Product
newProduct2
Product
console.log(newProduct instanceOf Product); // false
console.log(newProduct2 instanceOf Product); // true
控制台日志看起来“不同”的原因只是因为控制台还会记录实例化对象的类的名称。
推荐阅读
- flutter - Flutter 中的流媒体广播
- python - 在 QFileDialog 中覆盖 filterAcceptsRow 时结果不一致
- performance - JMeter 线程组每秒未达到指定的事务
- sql - PostgreSql 不理解列名
- json - 获取 API 时页面重新加载
- android - 如何使用 react native 仅录制手机的间隔语音并将其转换为 base64 编码的音频文件?
- python - qiskit 包的加载问题 - _fblas
- outlook - Outlook VSTO CustomPanesIssue.Add - 不支持此类接口
- html - 如何将 flexbox 导航栏下拉项放入列而不是一长列
- html - HTML中的短链接链接类型用于什么?