Если я что-то вроде этого ниже, как я могу получить доступ к свойству из класса?
class Person
{
private static name: string;
}
console.log(Person.name);
Не должна ли она недоступна?
Если я что-то вроде этого ниже, как я могу получить доступ к свойству из класса?
class Person
{
private static name: string;
}
console.log(Person.name);
Не должна ли она недоступна?
Это должно быть ошибка, но это не так. Из спецификации, раздел 8.2.1:
Это не представляется возможным определить доступность статики-они эффективно всегда общедоступны.
Доступность модификаторов на статике являются чем - то команда считается в прошлом. Если у вас есть сильный случай использования вы должны принести это на CodePlex сайте!
Ну, не совсем, на самом деле , вы можете. Может быть , самое главное, чтобы спросить о машинописи версии он относится. У меня есть v1.5 беты , часть моей установки VS2012 (да, это работает , несмотря на это расчитано на VS2013).
У меня есть класс, как это:
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);
};
}
В примере выше вы можете увидеть , как privateи static. Класс компилируется следующим 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;
})();
и нет никаких проблем ни с его компиляции (это вы видите), а также его выполнения (это вы должны доверять, или, если вы хотите, попробуйте).
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
Если статическое свойство является частным, мы должны предоставить статический метод GET для доступа к нему. Это не может быть общим решением, но это единственный способ я знаю, непосредственно доступ к закрытому статическое свойство. С другой стороны, вы, возможно, придется добавить второй метод GET, если вы намерены получить доступ к свойству из экземпляра объекта. Оба получают методы могут иметь такое же имя, так как статический метод прибудет будет невидимым для экземпляра объекта.