Public vs Private в конструкторах машинописных текстов

Правильно ли я понимаю, что открытые члены в конструкторе TypeScript являются общедоступными в классе, а частные члены — закрытыми?

Если да, то какова эффективная разница между открытыми членами и свойствами?

Предполагая, что разница в том, что свойства могут действовать как свойства C# (то есть могут иметь код, связанный с их доступом), почему вы хотите сделать поле общедоступным без защиты, присущей тому, чтобы сделать его имущество?


person Jesse Liberty    schedule 28.07.2016    source источник
comment
stackoverflow.com/questions/12713659/typescript-private-members   -  person gattsbr    schedule 28.07.2016
comment
Обычно вы используете поле, потому что свойство добавляет больше нажатий клавиш и усложняет код, но без каких-либо преимуществ?   -  person Katana314    schedule 28.07.2016


Ответы (2)


private создает поле, а public создает свойство.

Это не похоже на свойство C#, на самом деле то, что делает его свойством, заключается в том, что оно общедоступно. Аксессуаров нет.

person Jesse Liberty    schedule 20.09.2016
comment
можете ли вы дать больше ясности в отношении поля и собственности здесь. - person Khurshid Ansari; 31.01.2019

Давайте сначала посмотрим на класс C#, а затем преобразуем его в TypeScript:

public class Car {
    private int _x;
    private int _y;
    public Car(int x, int y)
    {
        this._x = x;
        this._y = y;
    }
}

Средства _x и _y не могут быть доступны вне класса, но могут быть назначены только через конструктор, если вы хотите написать тот же код на TypeScript, это будет:

class Car {
    constructor(private _x: number, private _y: number) {}
}

Если вы работали с TypeScript, вы можете заметить, что мы используем ключевое слово this для доступа к этим переменным.

Если это только параметр, то в чем смысл использования this._x ИЛИ this._y вне конструктора в классе, потому что он также создает переменные-члены.

Вот код JavaScript, сгенерированный из приведенного выше кода TypeScript:

var Car = (function () {
    function Car(_x, _y) {
        this._x = _x;
        this._y = _y;
    }
    return Car;
})();

this._x и this._y перемещены внутрь другой функции, что означает, что объект Car не может получить к ней доступ, но вы можете инициировать и назначить функцию new Car(10, 20).

person Ali Adravi    schedule 16.11.2018