Pokud se mi něco takového níže, jak mohu získat přístup vlastnost z třídy?
class Person
{
private static name: string;
}
console.log(Person.name);
By to nemělo nepřístupné?
Pokud se mi něco takového níže, jak mohu získat přístup vlastnost z třídy?
class Person
{
private static name: string;
}
console.log(Person.name);
By to nemělo nepřístupné?
Mělo by dojít k chybě, ale není. Od spec, oddíl 8.2.1:
Není možné určit dostupnost statiky, které jsou v podstatě vždy veřejné.
Modifikátory dostupnost na statice jsou něco, co tým v minulosti zvažována. Pokud máte silný případ použití je třeba uvést toto nahoru na CodePlex stránce!
No, vlastně ne, ve skutečnosti můžete. Možná nejdůležitější je požádat o strojopisu verzi to týká. Mám v1.5 beta , který je součástí mé instalace VS2012 (ano, funguje to i přes to se zaměřuje na VS2013).
Mám třídu, jako je tento:
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);
};
}
V ukázce vidíte jak privatea static. Třída je sestaven tak, aby následující 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;
})();
a neexistuje žádný problém buď s kompilací (to vidíte), jakož i spuštěním (což byste měli věřit, nebo, pokud se vám líbí, zkuste).
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
Vede-li statická vlastnost je soukromý musíme poskytnout statické metody get k přístupu. To nemusí být společné řešení, ale je to jediný způsob, jak vím, pro přímý přístup k soukromé statickou vlastnost. Na druhou stranu, možná budete muset přidat druhý způsob dostat, pokud máte také v úmyslu přistupovat k vlastnosti z instance objektu. Oba dostat metody mohou mít stejný název, protože statické metody get bude neviditelné instance objektu.