我想知道这样做是否有好处:

  <div>{{getSomething()}}</div>

  export class MyComp {
    getSomething() { return ...}
  }

关于这件事:

 <div>{{getSomething}}</div>

 export class MyComp {
   get getSomething() { return ...}
 }

使用方法vs getter来显示计算出的数据.

推荐答案

我更深入地研究了这一点,并在操场上玩了打字游戏.

让我们看看它是什么样子:

在第一个示例中,我们声明了一个通过以下方式获取属性值的方法:

class Greeter {
  greeting: string;
  constructor(message: string) {
      this.greeting = message;
  }
   getGreeting() {
      return this.greeting;
  }
}

翻译成javascript后,它看起来像:

var Greeter = (function () {
   function Greeter(message) {
       this.greeting = message;
   }
   Greeter.prototype.getGreeting = function () {
       return this.greeting;
   };
   return Greeter;
}());

关于第二个例子,我们用以下方式声明了一个getter:

class GetterGreeter {
   _greeting: string;
   constructor(message: string) {
       this._greeting = message;
   }
    get greeting() {
       return this._greeting;
   }
}

翻译后看起来像:

var GetterGreeter = (function () {
   function GetterGreeter(message) {
       this._greeting = message;
   }
   Object.defineProperty(GetterGreeter.prototype, "greeting", {
       get: function () {
           return this._greeting;
       },
       enumerable: true,
       configurable: true
   });
   return GetterGreeter;
}());

(您可以使用声明和javascript here的翻译)

正如您在get方法中看到的(如第一个示例中所示),该方法在原型上声明,在第二个示例中,使用getter模式typescript使用defineProperty api.

在这两种情况下,我们都会调用一个方法,angular也会在其更改检测期间调用一个方法,以识别更改并重新渲染.

在我看来,这只是同一种方法的语法优势,我看不出其中一种方法有任何性能优势.

Typescript相关问答推荐

交叉点对数字和布尔的处理方式不同

Angular -使用Phone Directive将值粘贴到控件以格式化值时验证器不工作

如何基于对象关键字派生类型?

TypScript手册中的never[]参数类型是什么意思?

即使子网是公共的,AWS CDK EventBridge ECS任务也无法分配公共IP地址

键集分页顺序/时间戳上的筛选器,精度不相同

隐式键入脚本键映射使用

STypescript 件的标引签名与功能签名的区别

如何表示多层深度的泛型类型数组?

通过字符串索引访问对象';S的值时出现文字脚本错误

如何使用WebStorm调试NextJS的TypeScrip服务器端代码?

如何使默认导出与CommonJS兼容

正确使用相交类型的打字集

类型推断对React.ForwardRef()的引用参数无效

如何在Angular 服务中制作同步方法?

如何解决&Quot;类型不可分配给TypeScrip IF语句中的类型&Quot;?

将类型脚本函数返回类型提取到VSCode中的接口

仅当定义了值时才按值筛选数组

使用受保护的路由和入门来响应路由

使用 TypeScript 在 SolidJS 中绘制 D3 力图