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?
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?
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!
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).
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.