Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.111.183] |
|
Сообщ.
#1
,
|
|
|
Привествую коллеги , осваиваю современный JavaScript, дошел я наконец до ES6!
штука скажу вам приятная, но без ES3/ES5 думаю освоение ES6 не было бы полным, поскольку больше половины средств является сахаром Зацените мой класс Person, все верно я написал? В частности свойства ведь закрыты так? const Person = (function(){ const _name = Symbol(), _age = Symbol(), _friends = Symbol(); class Person { constructor({ name, age, friends = [] }){ this[_name] = name; this[_age] = age; this[_friends] = friends; } get name(){ return this[_name]; } get age(){ return this[_age]; } addFriend(friend) { this[_friends].push(friend); } toString(){ const len = this[_friends].length; let s = this[_friends].map(friend => friend.name).join(", "); if (len > 0) { s += (len !== 1) ? " are friends." : " is a friend."; } return `${this[_name]} is ${this[_age]} years old. ${s}`; } } return Person; }()); const shelby = new Person({ name: "Shelby", age: 27 }), gregory = new Person({ name: "Gregory", age: 42 }); gregory.addFriend(shelby); gregory.name = ""; //<-- свойство name только для чтения gregory.age = 0; gregory._name = ""; //<-- свойства _name не существует (на самом деле после этой операции оно будет создано, но оно никак не влияет на наше свойство name) gregory._age = 0; console.log(gregory.toString()); // "Gregory is 42 years old. Shelby is a friend." |
Сообщ.
#2
,
|
|
|
ох и перепадёт тебе от @Serafim-а...
|
Сообщ.
#3
,
|
|
|
Цитата K313 @ ох и перепадёт тебе от @Serafim-а... да кто он такой?! ну признайся я крут да? нормально замутил вроде задействовал всю мощь ES6 или где еще можно подрихтовать? |
Сообщ.
#4
,
|
|
|
сам все порешал
перл от Гения const Person = (function(){ const properties = new WeakMap(); class Person { constructor({name, age, friends = []}){ properties.set(this, { name, age, friends }); } get name(){ return properties.get(this).name; } get age(){ return properties.get(this).age; } addFriend(friend) { properties.get(this).friends.push(friend); } toString(){ const props = properties.get(this), len = props.friends.length; let s = props.friends.map(friend => friend.name).join(", "); if (len > 0) { s += (len !== 1) ? " are friends." : " is a friend."; } return `${props.name} is ${props.age} years old. ${s}`; } } return Person; }()); книжки читайте! пс. для админов! сделайте подсветку кода ES6! на дворе 2017 год! |
Сообщ.
#5
,
|
|
|
Cfon ты почти обрёл просветление, прошло всего пол года, маладес (sic!) ...только забыл, что "(function(){})" не нужен, ибо модуль и так всё инкапсулирует, а наверх надо прокидывать через export. Но поздравляю, ты уже добрёл до понимания: обращение к переменным объекта (сообщение #3720191)
Добавлено Цитата Cfon @ на дворе 2017 год! В таком случае логично сделать подсветку ES8, ты так не считаешь? Добавлено Цитата Cfon @ да кто он такой?! Хрен с горы, забей на него+ |
Сообщ.
#6
,
|
|
|
Цитата Serafim @ Cfon ты почти обрёл просветление, прошло всего пол года, маладес (sic!) ...только забыл, что "(function(){})" не нужен, ибо модуль и так всё инкапсулирует, а наверх надо прокидывать через export. IIFE тут я юзаю для скрытия констант Symbol Цитата Serafim @ Не возражаю пускай будет ES8 Цитата Serafim @ Цитата Cfon @ да кто он такой?! Хрен с горы, забей на него+ |