JavaScript полностью объектно ориентированный, казалось бы что может быть проще чем написать свой класс?
Не тут то было, классы в JS не так просты, как изначально может показаться.
Во-первых - в JS(версии ES5) нет конструкции с названием class, вместо этого используется объект function. Да, обычная функция в JavaScript играет роль класса:
Такая незамысловатая конструкция создаст класс ввиде объекта функции и экземпляр этой функции.
Затем выведет значение поля name класса User.
Но все поля, созданные таким образом будут недоступны извне. Для прямого доступа к полям нужно пользоваться таким способом объявления переменных:
Таким образом области видимости реализуются с помощью конструкций this.var_name и var var_name.
Конструктор можно реализовать следующим образом:
Классы в ES6
В ES6 ввели синтаксический сахар над прототипным наследованием:
Так в современных браузерах это уже будет работать, но старые браузеры не поймут такую запись.
Так что если хотите разрабатывать с современными технологиями, то пользуйтесь современными трансляторами кода (babel-preset-2015) и полифиллами (babel-es6-polyfill)
Спасибо за внимание.
1 2 3 4 5 6 7 8 | var User= function (first_name,second_name){ var name=first_name+ " " +second_name; this .getName= function (){ return name; } } var currentUser= new User( "Василий" , "Петров" ); alert(currentUser.getName()); |
1 2 3 4 5 | var User= function (first_name,second_name){ this .name=first_name+ " " +second_name; } var currentUser= new User( "Василий" , "Петров" ); alert(currentUser.name); |
1 2 3 4 5 6 7 8 9 10 11 12 | var User= function (first_name,second_name){ var name; var construct= function (){ name=first_name+ " " +second_name; } this .getName= function (){ return name; } construct(); } var currentUser= new User( "Василий" , "Петров" ); document.write(currentUser.getName()); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Entity { constructor({ id }){ this .id = id; } getId() { return this .id; } } class User extends Entity { constructor(props) { super (props); this .name = props.name; } getName() { return this .name; } } const user = new User({ id: 86, name: "Igor" }); alert(user.getId()); alert(user.getName()); |
Проверить ES6 классы