2015-08-25 3 views
4

Если у меня есть геттер, как это:кеш в геттерах/сеттерах?

export class foo{ 
    aaa: number; 
    bbb: number; 
    ccc: number; 

    constructor(){ 
     //whatever 
    } 

    get getHeight(f: number){ 
     return (f + 16) * Math.ceil(Math.round(Math.tan(aaa) + bbb/2) * ccc); 
    } 
} 

где aaa, bbb и ccc является константой, которая не изменятся во время выполнения.

Мне нужно многократно вызывать геттер из других классов во время выполнения, поэтому я хочу иметь возможность максимально снизить производительность с помощью «кеша» Math.ceil(Math.round(Math.tan(aaa) + bbb/2) * ccc). Возможно ли это сделать без необходимости создания совершенно новой переменной внутри класса foo?

* вопрос бонуса: возможно ли в машинописном тексте объединить одни и те же переменные типы в один? как в java, я могу сделать что-то вроде:

int aaa, bbb, ccc; 

но, похоже, машинопись не позволяет этого.

ответ

2

Можно ли это сделать без того, чтобы сделать совершенно новую переменную внутри Foo класса

Неа. В TypeScript нет статических функций локальных переменных, что эффективно, о чем вы просите.

Возможно ли в машинописном тексте объединить одни и те же переменные типы в один? как в java, я могу сделать что-то вроде

Не являюсь частью стандартного способа в TypeScript + У меня нет хитроумного трюка.

0

Похоже, вы должны экспортировать этот расчет на внешний статический класс, который делает этот расчет один раз на определение класса, как это:

class Calculator { 
    static a : number = 5; 
    static b : number = 6; 
    static c : number = 7; 
    static height : number = Math.ceil(Math.round(Math.tan(Calculator.a) + Calculator.b/2) * Calculator.c); 
} 

export class foo{ 

    constructor(){ 
     //whatever 
    } 

    getHeight(f: number){ 
     return (f + 16) * Calculator.height; 
    } 
} 
0

Я не уверен, что вы пытаетесь сделать. Но как это? Playground

export class foo{ 
    /* Is not visible outside of foo. */ 
    private static factor = Math.ceil(Math.round(Math.tan(foo.aaa) + foo.bbb/2) * foo.ccc); 

    public constructor(){ 
     //whatever 
    } 

    public getHeight(f: number){ 
     return (f + 16) * foo.factor; 
    } 
} 

export module foo { 
    /* Use module mixing for constant variables, */ 
    export const aaa = 1; 
    export const bbb = 2; 
    export const ccc = 3; 
} 

Или как это? Playground

export class foo{ 

    /* or readonly propierties. */ 
    public get aaa(){ return 1;}; 
    public get bbb(){ return 2;}; 
    public get ccc(){ return 3;}; 

    /* Is still not visible outside of foo. */ 
    private static factor = Math.ceil(Math.round(Math.tan(foo.aaa) + foo.bbb/2) * foo.ccc); 

    public constructor(){ 
     //whatever 
    } 

    public getHeight(f: number){ 
     return (f + 16) * foo2.factor; 
    } 
}