Как определять методы правильно в TypeScript?

Ввиду следующего кода в TypeScript

class Persona {
    constructor(public nombre: string, public apellido: string) {
    }

    nombreCompleto1 = () => {
        return this.nombre + " " + this.apellido;
    }

    nombreCompleto2() {
        return this.nombre + " " + this.apellido;
    }
}

var p = new Persona("Juan", "Pérez");

console.log(p.nombreCompleto1());
console.log(p.nombreCompleto2());

Поскольку возможно видеть методы nombreCompleto1 и nombreCompleto2 они делают то же самое, но признаны слегка различным.

Выполнив это в двух случаях получается ожидаемый результат:

Juan Pérez
Juan Pérez

Каково различие между двумя заявлениями, если два делают их самими, и каков подходящий способ это объявлять?

23
задан 09.05.2019, 20:55
1 ответ

В первом случае:

nombreCompleto1 = () => {
    return this.nombre + " " + this.apellido;
}

ты создаешь метод инстанции, это эквивалент, который нужно выполнять this.nombreCompleto1 = function() {...} в языке сценариев JavaScript.

Во втором случае:

nombreCompleto2() {
    return this.nombre + " " + this.apellido;
}

ты создаешь метод прототипа, он эквивалентный в Persona.prototype.nombreCompleto2 = function() {...} в языке сценариев JavaScript.

В общем предпочтительно создавать методы прототипа: в таком случае метод определяется единственный раз, в то время как методы инстанции поверят однажды из-за инстанции, тратя больше памяти.

Больше информации: TypeScript Classes and Интерфейсы

22
ответ дан 01.12.2019, 08:18
  • 1
    И cu и # 225; l два это рекомендуемый и потому что?... (чтобы завершать ответ) – Carlos Muñoz 01.11.2015, 23:47
  • 2
    Верный. и #161; В и # 241; adido! – Konamiman 02.11.2015, 10:25