Si je fais quelque chose comme ceci ci-dessous, comment puis-je accéder à la propriété sur la classe?
class Person
{
private static name: string;
}
console.log(Person.name);
Ne devrait pas inaccessible?
Si je fais quelque chose comme ceci ci-dessous, comment puis-je accéder à la propriété sur la classe?
class Person
{
private static name: string;
}
console.log(Person.name);
Ne devrait pas inaccessible?
Il doit être une erreur mais n'est pas. De la spécification, l'article 8.2.1:
Il est impossible de préciser l'accessibilité des-ils statics efficacement toujours public.
Les modificateurs d'accessibilité sur l'sont quelque chose statics équipe a examiné dans le passé. Si vous avez un cas fort utilisation , vous devez apporter ce sur CodePlex site!
Eh bien, pas vraiment, en fait , vous pouvez. Peut - être le plus important est de poser des questions sur la tapuscrit la version il se rapporte. Je beta v1.5 , une partie de mon installation de VS2012 (oui, cela fonctionne bien , il est destiné à VS2013).
J'ai une classe comme ceci:
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);
};
}
Dans l'exemple ci - dessus , vous pouvez voir à la fois privateet static. La classe est compilé dans le Javascript suivant:
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;
})();
et soit compiler il n'y a pas de problème (ce que vous voyez), ainsi que l'exécuter (ce que vous devez faire confiance, ou, si vous voulez, essayez).
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
Si une propriété statique nous est privé doivent fournir une méthode get statique pour y accéder. Cela peut ne pas être une solution commune, mais il est le seul moyen que je connaisse pour accéder directement à une propriété statique privée. D'autre part, vous devrez peut-être ajouter une seconde méthode get si vous avez l'intention aussi d'accéder à la propriété d'un objet instancié. Les deux méthodes peuvent obtenir le même nom depuis la méthode get statique sera invisible à l'objet instancié.