Wenn ich unter so etwas tun, wie kann ich Zugriff auf die Eigenschaft aus der Klasse?
class Person
{
private static name: string;
}
console.log(Person.name);
Sollte es nicht unzugänglich?
Wenn ich unter so etwas tun, wie kann ich Zugriff auf die Eigenschaft aus der Klasse?
class Person
{
private static name: string;
}
console.log(Person.name);
Sollte es nicht unzugänglich?
Es sollte ein Fehler sein, aber ist es nicht. Von der Spezifikation, Abschnitt 8.2.1:
Es ist nicht möglich, die Zugänglichkeit zu spezifizieren Statik-sie sind effektiv immer öffentlich.
Accessibility Modifikatoren auf Statik sind etwas das Team in der Vergangenheit in Betracht gezogen hat. Wenn Sie einen starken Anwendungsfall haben , sollen Sie diese bringen auf bis Codeplex - Website!
Nun, nicht wirklich in der Tat möglich. Vielleicht am wichtigsten ist , über das Typoskript fragen Version sie sich bezieht. Ich habe v1.5 beta , ein Teil meiner VS2012 - Installation (ja, es funktioniert trotz es bei VS2013 ausgerichtet ist).
Ich habe eine Klasse wie folgt aus:
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 der Probe über Sie beide sehen können privateund static. Die Klasse wird auf die folgende Javascript zusammengestellt:
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;
})();
und es gibt kein Problem mit entweder Kompilieren (das Sie sehen), sowie die Ausführung es (das sollten Sie vertrauen, oder, wenn man so will, versuchen).
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
Wenn eine statische Eigenschaft privat ist, müssen wir eine statische Methode get zur Verfügung zu stellen, um darauf zuzugreifen. Dies kann nicht eine gemeinsame Lösung sein, aber es ist der einzige Weg, den ich kenne, um direkt eine private statische Eigenschaft zugreifen. Auf der anderen Seite, können Sie eine zweite Methode get hinzufügen müssen, wenn Sie auch die Eigenschaft für den Zugriff von einem instanzierte Objekt beabsichtigen. Beide bekommen Methoden können den gleichen Namen haben, da die statische Methode get unsichtbar für das instanzierte Objekt sein wird.