Private statiske egenskaper i Loggfila

stemmer
9

Hvis jeg gjør noe som dette under, hvordan kan jeg få tilgang til eiendommen ut klassen?

class Person
{
    private static name: string;
}

console.log(Person.name);

Skulle det ikke utilgjengelig?

Publisert på 10/10/2012 klokken 20:11
kilden bruker
På andre språk...                            


3 svar

stemmer
12

Det bør være en feil, men er det ikke. Fra spec, punkt 8.2.1:

Det er ikke mulig å angi tilgjengeligheten av statikk-de er effektivt alltid publikum.

Tilgjengelighets modifikatorer på statikk er noe teamet har vurdert tidligere. Hvis du har en sterk bruk fall bør du ta dette opp på CodePlex site!

Svarte 10/10/2012 kl. 20:17
kilden bruker

stemmer
1

Vel, egentlig ikke, faktisk du kan. Kanskje det viktigste er å spørre om Loggfila versjonen det gjelder. Jeg har v1.5 beta , en del av min VS2012 installasjon (ja, det fungerer til tross for det er rettet mot VS2013).

Jeg har en klasse som dette:

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

I eksempelet ovenfor kan du se både privateog static. Klassen er kompilert til følgende 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;
})();

og det er ingen problem med enten kompilere den (dette du ser), samt gjennomføring av det (dette bør du stoler på, eller, hvis du vil, prøve).

Svarte 20/05/2015 kl. 14:38
kilden bruker

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

console.log(Person.name);

Hvis en statisk Eiendommen er privat trenger vi å gi en statisk get metode for å få tilgang til det. Dette kan ikke være en felles løsning, men det er den eneste måten jeg vet om å få direkte tilgang til en privat statisk eiendom. På den annen side, kan det hende du må legge til en andre get metoden hvis du også har tenkt å få tilgang til eiendommen fra en instansiert objekt. Begge får metoder kan ha samme navn siden den statiske get metoden vil være usynlig for det startes objekt.

Svarte 16/11/2015 kl. 20:52
kilden bruker

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