Ввиду следующего кода в 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
Каково различие между двумя заявлениями, если два делают их самими, и каков подходящий способ это объявлять?
В первом случае:
nombreCompleto1 = () => {
return this.nombre + " " + this.apellido;
}
ты создаешь метод инстанции, это эквивалент, который нужно выполнять this.nombreCompleto1 = function() {...}
в языке сценариев JavaScript.
Во втором случае:
nombreCompleto2() {
return this.nombre + " " + this.apellido;
}
ты создаешь метод прототипа, он эквивалентный в Persona.prototype.nombreCompleto2 = function() {...}
в языке сценариев JavaScript.
В общем предпочтительно создавать методы прототипа: в таком случае метод определяется единственный раз, в то время как методы инстанции поверят однажды из-за инстанции, тратя больше памяти.
Больше информации: TypeScript Classes and Интерфейсы