Shitbox2,
Если вы в TS определяете методы так:
class Dog {
bulk = CreateMethod({name: 'bulk', volume: 90})
}
то это тоже само что в TS/ES6 сделать так:
class Dog {
constructor() {
this.bulk = CreateMethod({name: 'bulk', volume: 90});
}
}
и это совсем не тоже самое что в TS/ES6 сделать так:
class Dog {
bulk() { ... }
}
Что касается примера декоратора, имхо автор книги что-то попутал и изобрел лишнюю функцию construct, без нее работает также:
function logClass(target: any) {
// сохраняем ссылку на исходный конструктор
var original = target;
// новое поведение конструктора
var f : any = function (...args) {
console.log("New: " + original.name);
return new original(...args);
}
// копируем прототип, чтобы работал оператор instanceof
f.prototype = original.prototype;
// возвращаем новый конструктор (он переопределит исходный)
return f;
}
@logClass
class Person {
public name: string;
public surname: string;
constructor(name : string, surname : string) {
this.name = name;
this.surname = surname;
}
}
var p = new Person("remo", "jansen");
Еще короче, работает также:
class Person {
public name: string;
public surname: string;
constructor(name : string, surname : string) {
console.log("New: " + this.constructor.name);
this.name = name;
this.surname = surname;
}
}
var p = new Person("remo", "jansen");
Бессмысленный декоратор какой-то... есть подозрение что автор книги хотел отнаследовать оригинальный конструктор в прототип... но что-то пошло не так)