Частные статические свойства машинопись

голоса
9

Если я что-то вроде этого ниже, как я могу получить доступ к свойству из класса?

class Person
{
    private static name: string;
}

console.log(Person.name);

Не должна ли она недоступна?

Задан 10/10/2012 в 21:11
источник пользователем
На других языках...                            


3 ответов

голоса
12

Это должно быть ошибка, но это не так. Из спецификации, раздел 8.2.1:

Это не представляется возможным определить доступность статики-они эффективно всегда общедоступны.

Доступность модификаторов на статике являются чем - то команда считается в прошлом. Если у вас есть сильный случай использования вы должны принести это на CodePlex сайте!

Ответил 10/10/2012 в 21:17
источник пользователем

голоса
1

Ну, не совсем, на самом деле , вы можете. Может быть , самое главное, чтобы спросить о машинописи версии он относится. У меня есть 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;
})();

и нет никаких проблем ни с его компиляции (это вы видите), а также его выполнения (это вы должны доверять, или, если вы хотите, попробуйте).

Ответил 20/05/2015 в 14:38
источник пользователем

голоса
0
    class Person
{
    private static theName: string = "John";
    static get name():string{
        return Person.theName;
    }
}

console.log(Person.name);

Если статическое свойство является частным, мы должны предоставить статический метод GET для доступа к нему. Это не может быть общим решением, но это единственный способ я знаю, непосредственно доступ к закрытому статическое свойство. С другой стороны, вы, возможно, придется добавить второй метод GET, если вы намерены получить доступ к свойству из экземпляра объекта. Оба получают методы могут иметь такое же имя, так как статический метод прибудет будет невидимым для экземпляра объекта.

Ответил 16/11/2015 в 20:52
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more