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