Что такое геттеры и сеттеры в TypeScript?
TypeScript поддерживает геттеры и сеттеры, которые позволяют управлять доступом к членам объектов. Они дают разработчику средства контроля над чтением и записью свойств объектов.
👉 @frontendInterview
TypeScript поддерживает геттеры и сеттеры, которые позволяют управлять доступом к членам объектов. Они дают разработчику средства контроля над чтением и записью свойств объектов.
class foo {
private _bar:boolean = false;
get bar():boolean {
return this._bar;
}
set bar(theBar:boolean) {
this._bar = theBar;
}
}
var myBar = myFoo.bar; // здесь вызывается геттер
myFoo.bar = true; // здесь вызывается сеттер👉 @frontendInterview
Заводы - рабочим, либы - фронтендерам!
Хороший фронтендер может закодить что угодно
Senior знает как сделать это быстрее, используя готовые решения
Читай Frontender Libs по 5 мин в день и ты станешь гуру в фронтенд либах
Хороший фронтендер может закодить что угодно
Senior знает как сделать это быстрее, используя готовые решения
Читай Frontender Libs по 5 мин в день и ты станешь гуру в фронтенд либах
Какое из перечисленных свойств не анимируемо?
Anonymous Quiz
12%
left
55%
display
23%
word-spacing
6%
color
5%
opacity
Как предотвратить слишком ранний вызов функции?
Throttle
Данная техника предотвращает вызов функции более одного раза за определенный промежуток времени. В примере ниже обработчик события нажатия кнопки срабатывает не чаще одного раза в секунду.
Данная техника позволяет обеспечить вызов функции только по истечении определенного времени с момента ее последнего вызова. Это может быть полезным, когда необходимо выполнять "дорогие" вычисления в ответ на событие, которое возникает очень часто (например, событие прокрутки или нажатия клавиши).
В примере ниже ввод текста задерживается на 250 мс:
👉 @frontendInterview
Throttle
Данная техника предотвращает вызов функции более одного раза за определенный промежуток времени. В примере ниже обработчик события нажатия кнопки срабатывает не чаще одного раза в секунду.
import { throttle } from 'lodash'
class LoadMoreButton extends React.Component {
constructor(props) {
super(props)
this.handleClick = this.handleClick.bind(this)
this.handleClickThrottled = throttle(this.handleClick, 1000)
}
componentWillUnmount() {
this.handleClickThrottled.cancel()
}
render() {
return <button onClick={this.handleClickThrottled}>Загрузить еще</button>
}
handleClick() {
this.props.loadMore()
}
}
DebounceДанная техника позволяет обеспечить вызов функции только по истечении определенного времени с момента ее последнего вызова. Это может быть полезным, когда необходимо выполнять "дорогие" вычисления в ответ на событие, которое возникает очень часто (например, событие прокрутки или нажатия клавиши).
В примере ниже ввод текста задерживается на 250 мс:
import { debounce } from 'lodash'
class Searchbox extends React.Component {
constructor(props) {
super(props)
this.handleChange = this.handleChange.bind(this)
this.emitChangeDebounced = debounce(this.emitChange, 250)
}
componentWillUnmount() {
this.emitChangeDebounced.cancel()
}
render() {
return (
<input
type="text"
onChange={this.handleChange}
placeholder="Поиск..."
defaultValue={this.props.value}
/>
)
}
handleChange(e) {
this.emitChangeDebounced(e.target.value)
}
emitChange(value) {
this.props.onChange(value)
}
}👉 @frontendInterview
HTML5. Недостающее руководство
Доступно и в занимательной форме рассказано, как HTML превратился в HTML5.
Рассмотрены семантические элементы и новые стандарты языка.
Описано, как создавать современные веб-страницы, в том числе улучшенные веб-формы, поддерживать аудио и видео, рисовать на холсте, совершенствовать оформление веб-страниц с помощью CSS3. Даны практические рекомендации по созданию интеллектуальных веб-приложений, хранению данных, разработке автономных приложений. Показано, как реализовать взаимодействие с веб-сервером, геолокацию, фоновые вычисления , управление историей просмотров и браузерную совместимость с элементами HTML5.
👉 @frontendInterview
Доступно и в занимательной форме рассказано, как HTML превратился в HTML5.
Рассмотрены семантические элементы и новые стандарты языка.
Описано, как создавать современные веб-страницы, в том числе улучшенные веб-формы, поддерживать аудио и видео, рисовать на холсте, совершенствовать оформление веб-страниц с помощью CSS3. Даны практические рекомендации по созданию интеллектуальных веб-приложений, хранению данных, разработке автономных приложений. Показано, как реализовать взаимодействие с веб-сервером, геолокацию, фоновые вычисления , управление историей просмотров и браузерную совместимость с элементами HTML5.
👉 @frontendInterview
Среднее значение
Напишите функцию, которая вернет среднее значение чисел из данного массива, округлённое вниз. При этом, вам запрещено использовать любые циклы.
Пример:
👉 @frontendInterview
Напишите функцию, которая вернет среднее значение чисел из данного массива, округлённое вниз. При этом, вам запрещено использовать любые циклы.
Пример:
[90,98,89,100,100,86,94] => 94👉 @frontendInterview
Интерфейс. Основы проектирования взаимодействия
Алан Купер начал работу над первым изданием этой книги 20 лет назад. Он убеждал программистов в том, что пришла пора шагнуть навстречу пользователям и начать писать программы, которые будут им нравиться. В наши дни сложилась совершенно иная ситуация — оцифровка всех видов информации заставила пользователей с головой окунуться в новые технологии. Четвертое издание книги учитывает все изменения в отрасли, произошедшие за последние семь лет, с сохранением всех идей из предыдущих изданий, не потерявших актуальности.
Проектирование взаимодействия — это ориентированный на человека подход проектирования интерактивных цифровых продуктов, сред, систем и сервисов. Много внимания уделено проектированию поведения — аспекту, которым традиционные дисциплины проектирования нередко пренебрегают.
👉 @frontendInterview
Алан Купер начал работу над первым изданием этой книги 20 лет назад. Он убеждал программистов в том, что пришла пора шагнуть навстречу пользователям и начать писать программы, которые будут им нравиться. В наши дни сложилась совершенно иная ситуация — оцифровка всех видов информации заставила пользователей с головой окунуться в новые технологии. Четвертое издание книги учитывает все изменения в отрасли, произошедшие за последние семь лет, с сохранением всех идей из предыдущих изданий, не потерявших актуальности.
Проектирование взаимодействия — это ориентированный на человека подход проектирования интерактивных цифровых продуктов, сред, систем и сервисов. Много внимания уделено проектированию поведения — аспекту, которым традиционные дисциплины проектирования нередко пренебрегают.
👉 @frontendInterview
Есть ли в предоставленном вам TypeScript-коде ошибки? Объясните свой ответ.
Ошибок в этом коде нет. Объявление класса создаёт две сущности: это тип данных, используемый для создания экземпляров класса, и функция-конструктор. Так как классы создают типы данных, использовать их можно там же, где можно использовать интерфейсы.
👉 @frontendInterview
Ошибок в этом коде нет. Объявление класса создаёт две сущности: это тип данных, используемый для создания экземпляров класса, и функция-конструктор. Так как классы создают типы данных, использовать их можно там же, где можно использовать интерфейсы.
👉 @frontendInterview
Что такое синтетические события (synthetic events) в React?
В React обработчики событий оборачиваются в объект SyntheticEvent. Данные объекты являются общими, т.е. объекты, получаемые обработчиками, повторно используются другими обработчиками для повышения производительности. Это также означает, что получить доступ к свойствам такого объекта не получится, поскольку они сбрасываются перед повторным использованием.
В следующем примере в консоль будет выведено null, поскольку свойства события были сброшены в SyntheticEvent:
👉 @frontendInterview
В React обработчики событий оборачиваются в объект SyntheticEvent. Данные объекты являются общими, т.е. объекты, получаемые обработчиками, повторно используются другими обработчиками для повышения производительности. Это также означает, что получить доступ к свойствам такого объекта не получится, поскольку они сбрасываются перед повторным использованием.
В следующем примере в консоль будет выведено null, поскольку свойства события были сброшены в SyntheticEvent:
function handleClick(event) {
setTimeout(function () {
console.log(event.target.name)
}, 1000)
}
Эту проблему можно решить посредством сохранения свойства события: function handleClick(event) {
const name = event.target.name
setTimeout(function () {
console.log(name)
}, 1000)
}👉 @frontendInterview
Убрать минимум
Напишите функцию, которая принимает массив чисел, обрабатывает его и возвращает новый массив, в котором не будет самого меньшего числа из данного массива. Если наименьших чисел несколько, функция должна убрать число с наименьшим индексом.
Примеры:
👉 @frontendInterview
Напишите функцию, которая принимает массив чисел, обрабатывает его и возвращает новый массив, в котором не будет самого меньшего числа из данного массива. Если наименьших чисел несколько, функция должна убрать число с наименьшим индексом.
Примеры:
removeSmallest([1,2,3,4,5]) = [2,3,4,5]
removeSmallest([5,3,2,1,4]) = [5,3,2,4]
removeSmallest([2,2,1,2,1]) = [2,2,2,1]👉 @frontendInterview
Чему равен левый верхний border-radius элемента section?
Anonymous Quiz
23%
48px
39%
72px
23%
60px
8%
64px
6%
90px
Расскажите об использовании декораторов свойств в TypeScript.
Декораторы можно использовать для изменения поведения классов, при этом ещё больше пользы от них можно получить при их использовании с каким-либо фреймворком. Например, если в вашем фреймворке есть методы, доступ к которым ограничен (скажем, они предназначены только для администратора), несложно будет написать декоратор метода
👉 @frontendInterview
Декораторы можно использовать для изменения поведения классов, при этом ещё больше пользы от них можно получить при их использовании с каким-либо фреймворком. Например, если в вашем фреймворке есть методы, доступ к которым ограничен (скажем, они предназначены только для администратора), несложно будет написать декоратор метода
@admin, который будет запрещать доступ к соответствующим методам пользователям, не являющимся администраторами. Можно создать декоратор @owner, который позволяет модифицировать объект только его владельцу. Вот как может выглядеть использование декораторов: class CRUD {
get() { }
post() { }
@admin
delete() { }
@owner
put() { }
}👉 @frontendInterview