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

问题描述 投票:2回答:2

我从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

如果属性英雄被定义为英雄类型那么为什么instanceof给我假?将此属性声明为Hero类型有什么意义,如果在设置值之后它不是Hero类型而是正常的Object类型

angular instanceof
2个回答
2
投票
  hero: Hero = {
    id: 1,
    name: 'Windstorm'
  };

在上面的代码中,您只是将一个类型的英雄属性声明为Hero,但是您要分配一个Object文字。它应该是hero: Hero = new Hero(),然后只有this.hero instanceOf Hero属性将返回true

说明:

JavaScript是一种基于原型的语言。包括String,Array在内的所有其他类的基类是Object。因此,在您的情况下,您使用对象文字{}创建一个对象。 Typescript没有显示任何错误,因为Hero类也从Object扩展。


1
投票

Hero从object扩展,因此它允许你分配一个JSON(JavaScript Object Notation)

这只是一个例子,正常的工作方式是使用特定类型的对象。如果你想要一个Hero类型的变量,你必须使用构造函数new Hero()隐式声明它

© www.soinside.com 2019 - 2024. All rights reserved.