Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #61 (permalink)  
Старый 29.04.2015, 21:16
Интересующийся
Посмотреть профиль Найти все сообщения от nondeterminism
 
Регистрация: 27.04.2015
Сообщений: 18

Сообщение от kobezzza
Прокси экономят память и не занимают времени при инициализации объекта
Внезапно, обычные прототипы делают то же самое
Ответить с цитированием
  #62 (permalink)  
Старый 29.04.2015, 21:19
Интересующийся
Посмотреть профиль Найти все сообщения от nondeterminism
 
Регистрация: 27.04.2015
Сообщений: 18

kobezzza,
Вообще, в целом, ты пытаешься засунуть Proxy туда, для чего они не предназначены. Я против Proxy ничего не имею, просто назначение у них несколько иное. Это, в первую очередь -- инструмент метапрограммирования.
Ответить с цитированием
  #63 (permalink)  
Старый 29.04.2015, 21:21
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от nondeterminism Посмотреть сообщение
Внезапно, обычные прототипы делают то же самое
И как ты на прототипах сделаешь чтобы this в this.protected.foo() ссылался на наш объекта, а не на this.protected без биндингов или явных указаний?

Хотя в кошерном ES7 можно будет просто написать:

this::protected.foo() // protected.foo.call(this)


Таска на добавление в Babel уже висит
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 29.04.2015 в 21:30.
Ответить с цитированием
  #64 (permalink)  
Старый 29.04.2015, 21:35
Интересующийся
Посмотреть профиль Найти все сообщения от nondeterminism
 
Регистрация: 27.04.2015
Сообщений: 18

Сообщение от kobezzza
чтобы this в this.protected.foo()
Я не совсем понял задачу. this вообще не может никуда ссылаться, он динамически связывается. Что ты тут под protected подразумеваешь, тоже не вполне понятно. В JS, насколько мне известно, его можно реализовать только лексическими замыканиями.
Короче, опиши задачу четче.
Ответить с цитированием
  #65 (permalink)  
Старый 29.04.2015, 21:50
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Вот валидный и рабочий пример на 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 песочница

Цитата:
Что ты тут под protected подразумеваешь, тоже не вполне понятно.
Методы и свойства доступные внутри класса и его потомков, но закрытые наружу.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 29.04.2015 в 21:53.
Ответить с цитированием
  #66 (permalink)  
Старый 29.04.2015, 21:51
Интересующийся
Посмотреть профиль Найти все сообщения от nondeterminism
 
Регистрация: 27.04.2015
Сообщений: 18

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
Ответить с цитированием
  #67 (permalink)  
Старый 29.04.2015, 21:55
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

И как в твоём примере доопределять методы в дочерних классах, как решается конфликт имён, как вводить новые свойства и методы не из замыкания, как сделать нормальный синтаксис, а не то сраное говно, которое ты написал?

PS: только сейчас я понял, что спорю с Foo, поэтому прекращаю это занятие.
__________________
kobezzza
code monkey
Ответить с цитированием
  #68 (permalink)  
Старый 30.04.2015, 10:25
Профессор
Отправить личное сообщение для UIjs Посмотреть профиль Найти все сообщения от UIjs
 
Регистрация: 24.04.2015
Сообщений: 183

Сообщение от kobezzza
поиграйся с Proxy
прокси опять же, производительность, нужно максимаально нативно все сделать

Сообщение от nondeterminism
засунуть Proxy туда, для чего они не предназначены
прокси и предназначены для описания поведения обьектов на таких низких уровнях, то есть как раз для подобных вещей


Сообщение от nondeterminism
this вообще не может никуда ссылаться, он динамически связывается. Что ты тут под protected подразумеваешь, тоже не вполне понятно. В JS, насколько мне известно, его можно реализовать только лексическими замыканиями.
слишком толсто несешь ахинею, попробуй потоньше, попробуй добавтить больше связи между словами, тогда мож кто и клюнет, а так просто набор терминов

kobezzza, не ну по сути закрытость внаружу дает неймспейс.
Так что просто между this.protected.method и this.protectedMethod разница не особая) , все лучший вариант уже обозначен. неймспейс _ . я вспомнил, когда я пилил Class я решил что это и есть протектет и сахар для этого не обязательно.

Сообщение от kobezzza
спорю с Foo
эт типа мне сменка пришла)?

Последний раз редактировалось UIjs, 30.04.2015 в 10:36.
Ответить с цитированием
  #69 (permalink)  
Старый 30.04.2015, 11:24
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
прокси опять же, производительность, нужно максимаально нативно все сделать
Ну ты же можешь при первом вызове кешировать вызов и дальше он уже не через прокси будет крутится, хотя это больше рассуждения вслух, вариант с _ самый лучший пока не сделают нативную поддержку)

Цитата:
эт типа мне сменка пришла)?
Угу
__________________
kobezzza
code monkey
Ответить с цитированием
  #70 (permalink)  
Старый 30.04.2015, 11:32
Профессор
Отправить личное сообщение для UIjs Посмотреть профиль Найти все сообщения от UIjs
 
Регистрация: 24.04.2015
Сообщений: 183

Сообщение от kobezzza
Ну ты же можешь при первом вызове кешировать вызов
я могу это и геттерами сделать), просто обьект this.protected наследую от Class.prototype и в this.protected вешаю геттеры, которые при обращении создадут забиндиную протектед функцию из Class.prototype и заменят геттер на значение этой функции. хм, можно угарнуть, а обьявлять их как и где? надо чтобы и на кофи работало и на яваскрипте и норм смотрелось)

Последний раз редактировалось UIjs, 30.04.2015 в 11:34.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Знаменитая функция Class учавствует в фреймворке ui2/0 __он_самый__ Оффтопик 3 29.12.2014 13:19
Унылого треша тред megaupload Оффтопик 648 17.06.2014 14:31
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Как работает функция Class godofjavascript Оффтопик 58 17.12.2012 09:49