Angular 6-来自示例的错误属性instanceof

时间:2019-02-22 10:51:08

标签: angular instanceof

我从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? 如果将该值设置为不是英雄类型而是普通对象类型,则将该属性声明为英雄类型有什么意义

2 个答案:

答案 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()隐式声明它。