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