proprietăți statice private dactilografiat

voturi
9

Dacă aș face așa ceva de mai jos, cum pot avea acces la proprietatea din clasa?

class Person
{
    private static name: string;
}

console.log(Person.name);

Nu ar trebui să-l inaccesibil?

Întrebat 10/10/2012 la 21:11
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
12

Ar trebui să fie o eroare, dar nu este. De spec, secțiunea 8.2.1:

Nu este posibil să se specifice accesibilitatea staticii-ele sunt efectiv întotdeauna publice.

Modificatori de accesibilitate pe staticii sunt ceva echipa a considerat în trecut. Dacă aveți un caz puternic de utilizare ar trebui să aducă acest lucru pe CodePlex site - ul!

Publicat 10/10/2012 la 21:17
sursa de către utilizator

voturi
1

Ei bine, nu într - adevăr, de fapt , poți. Poate cel mai important este de a întreba despre typescript versiunea care se referă. Am beta v1.5 , o parte din instalarea mea VS2012 (da, funcționează în ciuda faptului că se adresează VS2013).

Am o clasă de genul:

class ItemListPreProcessor {

    private static names: string[] = [ 'Name', 'Age' ];

    static createHeader = (eltName: string) => {
        var pdiv = $(eltName);
        pdiv.html('<table><thead><tr></tr></thead></tr><tbody></tbody></table>');
        var row = $('tr', pdiv);
        ItemListPreProcessor.names.forEach((n) => {
            row.append('<th>' + n + '</th>');
        });
        return $('tbody', pdiv);
    };
}

În exemplul de mai sus se poate vedea atât privateși static. Clasa este compilat la următoarea Javascript:

var ItemListPreProcessor = (function () {
    function ItemListPreProcessor() {
    }
    ItemListPreProcessor.names = ['Name', 'Age'];

    ItemListPreProcessor.createHeader = function (eltName) {
        var pdiv = $(eltName);
        pdiv.html('<table><thead><tr></tr></thead></tr><tbody></tbody></table>');
        var row = $('tr', pdiv);
        ItemListPreProcessor.names.forEach(function (n) {
            row.append('<th>' + n + '</th>');
        });
        return $('tbody', pdiv);
    };
    return ItemListPreProcessor;
})();

și nu există nici o problemă, fie compilarea (acest lucru vedeți), precum și executarea acesteia (acest lucru ar trebui să încredere, sau, dacă doriți, încercați).

Publicat 20/05/2015 la 14:38
sursa de către utilizator

voturi
0
    class Person
{
    private static theName: string = "John";
    static get name():string{
        return Person.theName;
    }
}

console.log(Person.name);

În cazul în care o proprietate statică este privat trebuie să furnizeze o metodă get statică pentru a accesa. Acest lucru nu poate fi o soluție comună, dar este singura cale știu de a avea acces direct o proprietate privată statică. Pe de altă parte, va trebui să adăugați oa doua metodă obține dacă intenționați, de asemenea, pentru a avea acces la proprietatea de la un obiect instantiat. Ambele metode de a obține pot avea același nume, deoarece metoda get statica va fi invizibil pentru obiectul instantiat.

Publicat 16/11/2015 la 20:52
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more