Private statische eigenschappen met de schrijfmachine

stemmen
9

Als ik iets doen als dit hieronder, hoe kan ik toegang tot de woning uit de klas?

class Person
{
    private static name: string;
}

console.log(Person.name);

Zou het niet bereikbaar is?

De vraag is gesteld op 10/10/2012 om 21:11
bron van user
In andere talen...                            


3 antwoorden

stemmen
12

Het zou een vergissing zijn, maar is het niet. Van de specificatie, sectie 8.2.1:

Het is niet mogelijk om de toegankelijkheid van specificeren statica, ze zijn effectief altijd openbaar.

Toegankelijkheid modifiers op statica zijn iets wat het team heeft overwogen in het verleden. Als je een sterke use case moet je deze brengen op CodePlex site!

antwoordde op 10/10/2012 om 21:17
bron van user

stemmen
1

Nou, niet echt, in feite je kunt. Misschien belangrijkste is om te vragen over de getypte versie het gaat. Ik heb v1.5 bèta , een deel van mijn VS2012 installatie (ja, het werkt ondanks dat is gericht op VS2013).

Ik heb een klasse als volgt uit:

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

In het bovenstaande voorbeeld kunt u zowel zien privateen static. De klas wordt samengesteld aan de volgende 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;
})();

en er is geen probleem met de compilatie (dit zie je), evenals het uitvoeren hiervan (dit moet je vertrouwt, of, zo u wilt, probeer).

antwoordde op 20/05/2015 om 14:38
bron van user

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

console.log(Person.name);

Als een statische eigenschap is prive moeten we een statische get methode om het te activeren. Dit is misschien niet een gezamenlijke oplossing, maar het is de enige manier die ik ken om direct toegang te krijgen tot een privé-statische eigenschap. Aan de andere kant, moet u wellicht een tweede methode get toevoegen als u ook van plan om toegang te krijgen tot de woning een geïnstantieerd object. Beide krijgen methoden kunnen dezelfde naam hebben, omdat de statische methode get onzichtbaar voor de ingekaderde object zal zijn.

antwoordde op 16/11/2015 om 20:52
bron van user

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