Цитата:
Да, конечно же, я имел в виду свойства. Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
вот записал про наследование для тех кто не в курсе для чего оно, ну и за одно про юишку)
https://www.youtube.com/watch?v=FWc8-dsFKOw |
брин ребят не несите хурню, суть приватных полей класса - ИЗБЕЖАТЬ КОФЛИКТ ИМЕН и ИНКАПСУЛЯЦИЯ. обе цели у меня реализованы. точка.
викмапы какие то придумывают блин kobezzza, обуздай пасанов близ а то у меня время нет) |
Цитата:
Я не пользовался WeakMap/WeakSet т.к. не вижу в них необходимости =) |
Цитата:
Цитата:
Или другой пример: в качестве ключа выступает DOM нода, а в значении мы храним свою полезную инфу, и когда ноду грохнут, то она автоматом грохнется из WeakMap, т.е. это более правильный подход чем расширения ноды своими свойствами, т.к. нет проблемы конфликта имён. Разумеется также есть Map / Set, которые в отличии от Weak аналогов итерабельны (причём с сохранением порядка вставки), но там память сама уже не чистится. |
Цитата:
Например есть какая нибудь либа и нужно проэксопртировать модель того что она там нагененирила куда нибудь (отпарвить на бэк) или наоборот с бэка пришло и нужно синхронизировать новую модель и модель либы, я не представляю как тут жить без мапов разных :) |
Цитата:
п.с. какая вообще логическая связь между мапами и созданием приватных полей класса обьяснит кто нибудь? создается впечатление что тут форум новичков одних. ахинею несете, стыдно. |
Цитата:
|
Цитата:
|
Цитата:
|
UIjs, а почему у тебя нет сахара для protected свойств, т.е. доступ внутри класса и дочерних классов. Это очень удобная абстракция :)
|
kobezzza, потому что это сильная накладка на производительность, их все нужно биндить к каждому инстансу, вот щас Class примерно на 3% медленнее обычных обьектов не наследованых. А как сделать такие же быстрые протектед я не знаю... правда не знаю
то есть чтобы можно было писать вот так this.protected.say() и надо чтобы this сохранялся, выходит придется биндить при инстанцировании каждого инстанса. но при том если обьект this.protected наследует от this.protected родительского класса, то тогда надо перебиндивать? короче я не совсем понимаю как такое провернуть( |
Цитата:
_myProtectedMethod Это я так шуткую :) Цитата:
|
а, точно, че туплю))))))) подчеркивание же и есть протектед просто я могу сделать быстренько переименовывать их убирая подчеркивание а потом снова ставя, это ж вообще не накладно? а как тогда их обьявлять? короче лучше просто подчеркиванием делать и все)
|
Цитата:
// Псевдокод this.protected = { __noSuchMethod__: (name, args) => this.super[name].apply(this, args) }; |
Цитата:
UPD Вообще, это и безо всякого прокси можно реализовать. |
Цитата:
|
Цитата:
|
kobezzza,
Вообще, в целом, ты пытаешься засунуть Proxy туда, для чего они не предназначены. Я против Proxy ничего не имею, просто назначение у них несколько иное. Это, в первую очередь -- инструмент метапрограммирования. |
Цитата:
Хотя в кошерном ES7 можно будет просто написать: this::protected.foo() // protected.foo.call(this) Таска на добавление в Babel уже висит :) |
Цитата:
Короче, опиши задачу четче. |
Вот валидный и рабочий пример на ES7 (Babel)
class Base { name = 'Hello World'; protected = { getName() { return this.name; } }; constructor() { this.protected = new Proxy(this.protected, { get: (target, name) => { return target[name].bind(this); } }); } } class Child extends Base { constructor() { super(); console.log(this.protected.getName()); // Hello World } } new Child(); Babel песочница Цитата:
|
kobezzza,
O=function(){ var protected_=10 return { create: function(){return Object.create(this)}, get: function(){return protected_}, set: function(value){protected_=value} } }() o=O.create() console.log(o.get()) o.set(100) console.log(o.get()) //>>>> 10 //>>>> 100 |
И как в твоём примере доопределять методы в дочерних классах, как решается конфликт имён, как вводить новые свойства и методы не из замыкания, как сделать нормальный синтаксис, а не то сраное говно, которое ты написал?
PS: только сейчас я понял, что спорю с Foo, поэтому прекращаю это занятие. |
Цитата:
Цитата:
Цитата:
kobezzza, не ну по сути закрытость внаружу дает неймспейс. Так что просто между this.protected.method и this.protectedMethod разница не особая) , все лучший вариант уже обозначен. неймспейс _ . я вспомнил, когда я пилил Class я решил что это и есть протектет и сахар для этого не обязательно. Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
писать фильтры на кофескрипте одно удовольствие, и ни какой ES6 не сравнится)
![]() ![]() |
круто придумал))
вешается на Class.prorotype.parent геттер и когда запрашиваем это свойство то нам известно this из которого запрашивается это свойство, дальше мы запоминаем этот this. а в parent лежат функции обертки которые вызывают оригинальные родительские методы в контексте этого запомннеого текущего this который где то там хранится. и все) таким образом получаем ![]() Так же можжно кэшировать один раз запрошеную функцию), круто я придумал, kobezzza? так мы сможем хоть протектед сделать) |
кроме того eval сохраняет замыкание, по этому если запретить в обьявлении класса использовать замыкания во вне (а у меня это и так запрещено потому что все зависимости надо подключать как в ангуляре через параметры к функции), то тогда мы смоежм проивалить код функции описывающей класс и засунуть в её замыкание ссылки на свойства super parent и все такое
w = (function(){ var qq = 11; return eval("(function(){ alert(qq) })") })(); w() поскольку обьявление класса не горячий кусок кода, так как классов будет не больше тысячи, а для яваскрипта сделать 1000 ивалов - ничто. то с быстротой тут проблема не стоит. единственное что так это нужно избежатьп аркинга кода класса. нужно использовать максимально нативные механизмы. дальше встает проблема как передавать контекст this в те функции, которые мы запрашвиаем через parent и super я просто думаю как сделать чтобы можно было писать не this.parent а просто parent, а дальше работала магия можно например методы класса обернуть во врапперы, которые будут текущий this складывать в определенное место к которому parent будет иметь доступ. но опять же, врапперы. долго. нужно что то хитрее) помогай! |
Цитата:
Цитата:
Цитата:
Цитата:
Т.е. почему бы тебе вместо того, чтобы плясать в рантайме и делать магию, а просто сделать надмножество над самим языком (как например Iced Coffee Script сделан над Coffee Script). |
Цитата:
добавлю таким же способом приватные в классы ES6 Цитата:
|
Цитата:
Цитата:
|
kobezzza, как уж там назывется крутой ES6 транслятор?
ну тип самый быстрый, самый минимальнокодагенерируемы й и.т.п. |
Цитата:
|
kobezzza, эт точно самый крутой?
|
Цитата:
|
Часовой пояс GMT +3, время: 05:25. |