Soukromé statické vlastnosti na psacím stroji

hlasů
9

Pokud se mi něco takového níže, jak mohu získat přístup vlastnost z třídy?

class Person
{
    private static name: string;
}

console.log(Person.name);

By to nemělo nepřístupné?

Položena 10/10/2012 v 21:11
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
12

Mělo by dojít k chybě, ale není. Od spec, oddíl 8.2.1:

Není možné určit dostupnost statiky, které jsou v podstatě vždy veřejné.

Modifikátory dostupnost na statice jsou něco, co tým v minulosti zvažována. Pokud máte silný případ použití je třeba uvést toto nahoru na CodePlex stránce!

Odpovězeno 10/10/2012 v 21:17
zdroj uživatelem

hlasů
1

No, vlastně ne, ve skutečnosti můžete. Možná nejdůležitější je požádat o strojopisu verzi to týká. Mám v1.5 beta , který je součástí mé instalace VS2012 (ano, funguje to i přes to se zaměřuje na VS2013).

Mám třídu, jako je tento:

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);
    };
}

V ukázce vidíte jak privatea static. Třída je sestaven tak, aby následující 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;
})();

a neexistuje žádný problém buď s kompilací (to vidíte), jakož i spuštěním (což byste měli věřit, nebo, pokud se vám líbí, zkuste).

Odpovězeno 20/05/2015 v 14:38
zdroj uživatelem

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

console.log(Person.name);

Vede-li statická vlastnost je soukromý musíme poskytnout statické metody get k přístupu. To nemusí být společné řešení, ale je to jediný způsob, jak vím, pro přímý přístup k soukromé statickou vlastnost. Na druhou stranu, možná budete muset přidat druhý způsob dostat, pokud máte také v úmyslu přistupovat k vlastnosti z instance objektu. Oba dostat metody mohou mít stejný název, protože statické metody get bude neviditelné instance objektu.

Odpovězeno 16/11/2015 v 20:52
zdroj uživatelem

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