Я пытаюсь создать метод get и set для свойства:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
Какое ключевое слово для установки значения?
typescript
MuriloKunze
источник
источник
typescript private name: string; getName() { get: { return this.name; } set: { this.name = ???; } }
Ответы:
TypeScript использует синтаксис getter / setter, который похож на ActionScript3.
Это создаст этот JavaScript, используя
Object.defineProperty()
функцию ECMAScript 5 .Таким образом, чтобы использовать его,
Однако, чтобы использовать его вообще, вы должны убедиться, что компилятор TypeScript нацелен на ECMAScript5. Если вы используете компилятор командной строки, используйте
--target
флаг, подобный этому;Если вы используете Visual Studio, вы должны отредактировать файл проекта, чтобы добавить флаг в конфигурацию инструмента сборки TypeScriptCompile. Вы можете увидеть это здесь :
Как подсказывает @DanFromGermany ниже, если вы просто читаете и пишете локальное свойство, например
foo.bar = true
, наличие пары сеттеров и геттеров является излишним. Вы всегда можете добавить их позже, если вам нужно что-то сделать, например, войти в систему, когда свойство будет прочитано или записано.источник
myFoo.bar = true
вместоmyFoo.bar(true);
илиmyFoo.setBar(true);
??Эзвард уже дал хороший ответ, но я заметил, что один из комментариев спрашивает, как он используется. Для таких людей, как я, которые сталкиваются с этим вопросом, я подумал, что было бы полезно иметь ссылку на официальную документацию по получателям и установщикам на веб-сайте Typescript, поскольку это хорошо объясняет это, и мы надеемся, что они всегда будут в курсе происходящих изменений. сделал, и показывает пример использования:
http://www.typescriptlang.org/docs/handbook/classes.html
В частности, для тех, кто не знаком с ним, обратите внимание, что вы не включаете слово «get» в вызов метода получения (и аналогично для метода установки):
Вы должны просто сделать это:
учитывая класс как:
тогда будет вызван метод 'bar' для частного свойства _bar.
источник
Вот рабочий пример, который должен указать вам правильное направление:
Методы получения и установки в JavaScript - это обычные функции. Сеттер - это функция, которая принимает параметр, значением которого является устанавливаемое значение.
источник
static
.Foo._name
следует заменить наthis._name
Вы можете написать это
источник
public
здесь определяются дубликаты членов.TS предлагает методы получения и установки, которые позволяют свойствам объекта иметь больший контроль над тем, как к ним получают доступ (средство получения) или обновляют (средство установки) вне объекта. Вместо прямого доступа или обновления свойства вызывается прокси-функция.
Пример:
источник
Это очень похоже на создание общих методов, просто зарезервируйте ключевое слово
get
илиset
в начале.В этом случае вы можете пропустить тип возврата в
get getMethod1() {
источник
Я думаю, я, наверное, понимаю, почему это так запутанно. В вашем примере мы хотели получить и установить для
_name
. Но мы достигаем этого, создавая методы получения и установки для несвязанной переменной классаName
.Учти это:
Выше код делает следующее:
get
иset
создать геттер и сеттер дляyourCarTiresCount
( не дляtiresCount
).Геттер это:
и сеттер это:
Это значит, что каждый раз, когда мы это делаем
new Car().yourCarTiresCount
, работает геттер. И на каждыйnew Car().yourCarTiresCount('7')
сеттер работает.tireCount
.источник
Если вы ищете способ использовать get и set для любого объекта (не для класса), это
Proxy
может быть полезно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ProxyПримечание: имейте в виду, что это новый API-интерфейс не поддерживается и требуется полифилл для старых браузеров
источник
Если вы работаете с модулями TypeScript и пытаетесь добавить экспортируемый метод получения, вы можете сделать что-то вроде этого:
Затем в другом файле у вас есть:
источник
this
должно быть неопределенным в области видимости верхнего уровня модуля. Вы могли бы использоватьexports
вместо этого, но вы не должны делать это вообще, поскольку это практически гарантированно вызовет проблемы совместимости