我从Angular示例中获得了这段代码
import { Component, OnInit } from '@angular/core';
import { Hero } from '../hero';
@Component({
selector: 'app-heroes',
templateUrl: './heroes.component.html',
styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {
hero: Hero = {
id: 1,
name: 'Windstorm'
};
constructor() {
console.log(this.hero instanceof Hero);
console.log(this.hero instanceof Object);
const otherHero = new Hero();
console.log(otherHero);
}
ngOnInit() {
}
}
控制台输出为:
false
true
true
如果将属性hero定义为Hero类型,那么为什么 instanceof 给我false? 如果将该值设置为不是英雄类型而是普通对象类型,则将该属性声明为英雄类型有什么意义
答案 0 :(得分:2)
hero: Hero = {
id: 1,
name: 'Windstorm'
};
在上面的代码中,您仅将Hero属性的Type声明为Hero
,但是您正在分配Object文字。应该为hero: Hero = new Hero()
,然后只有this.hero instanceOf Hero
属性将返回true
。
说明:
JavaScript是一种基于原型的语言。所有其他类(包括String,Array)的基类为Object
。因此,在您的情况下,您正在使用对象文字{}
创建对象。 Typescript没有显示任何错误,因为Hero
类也从Object
开始扩展。
答案 1 :(得分:1)
英雄从对象扩展而来,因此,它使您可以分配JSON( JavaScript对象表示法)
这只是一个示例,正常的工作方式将是处理特定类型的对象。 如果要使用Hero类型的变量,则必须使用构造函数new Hero()隐式声明它。