Prywatne właściwości statyczne w maszynopisie

głosy
9

Jeśli robię coś takiego poniżej, w jaki sposób można uzyskać dostęp do właściwości z klasy?

class Person
{
    private static name: string;
}

console.log(Person.name);

nie powinien on niedostępny?

Utwórz 10/10/2012 o 21:11
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
12

Powinno to być błąd, ale nie jest. Od spec, sekcja 8.2.1:

Nie jest możliwe określenie dostępności statyki-one skutecznie zawsze publicznego.

Modyfikatory Dostępność na statyki są czymś zespół uważane w przeszłości. Jeśli masz mocne argumenty stosowanie powinno przynieść to do góry na codeplex miejscu!

Odpowiedział 10/10/2012 o 21:17
źródło użytkownik

głosy
1

No, nie do końca, w rzeczywistości jest to możliwe. Być może najważniejsze jest to, aby zapytać o maszynopis wersji dotyczy. Mam v1.5 beta , część mojej instalacji VS2012 (tak, to działa, mimo że jest skierowany VS2013).

Mam klasy jak poniżej:

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

W próbce powyżej można zobaczyć zarówno privatei static. Klasa jest kompilowany do następnego 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 nie ma problemu z kompilacji albo go (to widać), a także wykonywanie go (powinno ufasz, albo, jeśli chcesz, spróbuj).

Odpowiedział 20/05/2015 o 14:38
źródło użytkownik

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

console.log(Person.name);

Jeśli właściwość statyczna jest prywatny musimy zapewnić statyczną metodę dostać się do niego dostęp. To nie może być wspólne rozwiązanie, ale jest to jedyny sposób, znam bezpośredni dostęp do prywatnej własności statyczne. Z drugiej strony, być może trzeba będzie dodać drugi sposób uzyskać, jeśli zamierzają również dostępu do właściwości z instancja obiektu. Obie metody mogą dostać mieć taką samą nazwę, ponieważ statyczna metoda get będzie niewidoczne dla instancja obiektu.

Odpowiedział 16/11/2015 o 20:52
źródło użytkownik

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