为什么我们不在Angular组件中使用关键字'function'?

时间:2017-06-10 18:34:48

标签: angular

在ts文件中,

export class ComponentName{
   methodName (para1,para2) {
     //code here
   }
}

这被认为是正确的,但是当我将关键字函数添加到方法时,代码不会编译并给出错误,说它只需要方法,访问器,构造函数和属性。

2 个答案:

答案 0 :(得分:2)

我认为你在理解ECMAScript 6时遇到了问题.Angular使用TypeScript,它基于ECMAScript 6。

  

传统JavaScript使用函数和基于原型的继承   构建可重用的组件,但这可能会感到有点尴尬   程序员更习惯于“面向对象的方法”,其中   类继承功能和对象是从这些构建的   类。从ECMAScript 2015开始,也称为ECMAScript 6,   JavaScript程序员将能够使用它来构建他们的应用程序   这种面向对象的基于类的方法。在TypeScript中,我们允许   开发人员现在使用这些技术,并将其编译为   适用于所有主流浏览器和平台的JavaScript,没有   必须等待下一版本的JavaScript。

     

...

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
     

如果您之前使用过C#或Java,那么语法看起来应该很熟悉。我们   宣布一个新类Greeter。这个类有三个成员:一个属性   叫问候语,构造函数和方法问候。

[Source]

答案 1 :(得分:0)

正如@virsha 所说,这不是关于 Angular,而是关于 ECMAScript 6 method definitions

<块引用>

从 ECMAScript 2015 开始,引入了更短的对象初始值设定项的方法定义语法。它是分配给方法名称的函数的简写。

const obj = {
  foo: function() {
    // ...
  },
  bar: function() {
    // ...
  }
}

速记语法类似于 ES5 中引入的 gettersetter 语法。

给定以下代码:

const obj = {
  foo() {
    // ...
  },
  bar() {
    // ...
  }
}

您现在可以将其缩短为:

class Point {
  x = 10;
  y = 10;

  scale(n: number): void {
    this.x *= n;
    this.y *= n;
  }
}

在 Typescript 文档中,这指的是 Class methods

<块引用>

类上的函数属性称为方法。方法可以使用所有与函数和构造函数相同的类型注解:

[1,0,0,1,1,1]

除了标准类型注解之外,TypeScript 不会向方法添加任何其他新内容。