首页 > 解决方案 > 如何从数组元素访问方法?

问题描述

我最近开始在我的课程中添加 setter 和 getter 方法。由于这样做,我的代码的许多部分都被破坏了,我无法访问 getter 方法。

举个例子:

private loadInputs() : Input[] {
        var inputs = <Input[]>this.get('inputs');
    inputs.sort((a,b) => a.QuoteRef().localeCompare(b.QuoteRef()))
        return( inputs || [] );
    }

我的输入类有 2 个变量,_Project: string _line: string 我使用 QuoteRef() 方法访问

public QuoteRef(): string {
    return this._Project.concat('-' + this._Line.toString().padStart(3,'0'));
  }

每当我尝试从我的类中访问被转换为输入的项目的方法或 getter 时,我都可以看到变量(尽管由于它们是私有的而不能访问它们),但原型部分不包含任何方法。

这会在网站控制台中触发以下错误:TypeError: a.QuoteRef is not a function

我究竟做错了什么?

更新

我通过如下更新代码让它工作:

inputs.sort((a,b) => {
      let first = new Input(a);
      let second = new Input(b);
      return first.QuoteRef().localeCompare(second.QuoteRef());
    });

标签: arraysangulartypescriptclassmethods

解决方案


没有看到您的完整课程,我只能猜测,但我认为您的 a 和 b 不是您期望的类型。我看不到 this.get('inputs') 做了什么,但我怀疑它没有返回带有 Input 类对象的数组。因此找不到函数(不是函数)。你可以试试:

inputs.sort((a,b) => {
  console.log(typeof a);
  console.log(typeof b);
  a.QuoteRef().localeCompare(b.QuoteRef());
})

并检查类型是什么。然后检查您的 this.get 实际返回的内容。

编辑:忘了提及您的 IDE 可能不会警告您,因为您将 this.get 的输出转换为 <Input[]>。


推荐阅读