Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.08.2015, 13:14
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
var a = array.get(0); //Получить нулевой индекс - да такие вот операторы на JS
Что мешает сделать просто array[0] ?
__________________
kobezzza
code monkey
Ответить с цитированием
  #12 (permalink)  
Старый 16.08.2015, 14:05
Интересующийся
Отправить личное сообщение для acterhd Посмотреть профиль Найти все сообщения от acterhd
 
Регистрация: 16.08.2015
Сообщений: 23

В JS нет operator overload. Так просто нельзя.
Ведь это классы а не массивы. Вот ты представь себе что будет если сделать?
extends Array

Я потеряю возможность адресации. Нельзя будет просто так двигать изначальный адрес. Да к тому же надо будет реализовать для всех массивов, включая типизированные. Так нельзя будет передавать указатель в указатель (т.е. приравнивание). Мне такое не надо.

Последний раз редактировалось acterhd, 16.08.2015 в 14:16.
Ответить с цитированием
  #13 (permalink)  
Старый 16.08.2015, 14:15
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
В JS нет operator overload.
Есть. Proxy (nodejs и iojs нужно запускать с флагом --harmony_proxies)
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 16.08.2015 в 14:20.
Ответить с цитированием
  #14 (permalink)  
Старый 16.08.2015, 14:30
Интересующийся
Отправить личное сообщение для acterhd Посмотреть профиль Найти все сообщения от acterhd
 
Регистрация: 16.08.2015
Сообщений: 23

Прокси это прокси, это отдельная фича (обертка поверх класса).
Да и в хроме нету.
Также я не вижу в Proxy столь важной функции как замещение скалярных операторов.

Последний раз редактировалось acterhd, 16.08.2015 в 14:32.
Ответить с цитированием
  #15 (permalink)  
Старый 16.08.2015, 14:35
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Да и в хроме нету.
Есть, просто скрыта за флагом в about:flags.

Цитата:
Также я не вижу в Proxy столь важной функции как замещение скалярных операторов.
Поясни. Можно повесить слушатель на получение/установку значения (get/set) и как раз реализовать array[0] вместо array.get(0).
__________________
kobezzza
code monkey
Ответить с цитированием
  #16 (permalink)  
Старый 16.08.2015, 15:04
Интересующийся
Отправить личное сообщение для acterhd Посмотреть профиль Найти все сообщения от acterhd
 
Регистрация: 16.08.2015
Сообщений: 23

Провожу доработку, довожу до ума.

Последний раз редактировалось acterhd, 17.08.2015 в 12:16.
Ответить с цитированием
  #17 (permalink)  
Старый 17.08.2015, 13:13
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от kobezzza
и как раз реализовать array[0] вместо array.get(0).
Я знаю только один хак)

var arr = [];

Object.defineProperty ( arr, 0, {
	get: function () {
          alert();
    	  return 0;
        }
        set: function (val) {
          alert(val);
        }
}  );

arr [0] = 5;

console.log( arr [0] )
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.

Последний раз редактировалось cyber, 17.08.2015 в 14:08.
Ответить с цитированием
  #18 (permalink)  
Старый 17.08.2015, 14:34
Интересующийся
Отправить личное сообщение для acterhd Посмотреть профиль Найти все сообщения от acterhd
 
Регистрация: 16.08.2015
Сообщений: 23

Cyber, Я реализовал через Proxy.
Вот обработчик для Proxy.

let _indexer = {
        get: function(obj, prop){
            return (!isNaN(prop) ? obj.get(parseInt(prop)) : obj[prop]);
        },
        set: function(obj, prop, val){
            if(!isNaN(prop)){
                obj.set(val, parseInt(prop));
            } else {
                obj[prop] = val;
            }
        }
    };


Проверяет, является ли переменная prop числом или нет. Если да, то извлечь ячейку памяти.

Последний раз редактировалось acterhd, 17.08.2015 в 14:37.
Ответить с цитированием
  #19 (permalink)  
Старый 17.08.2015, 15:02
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

acterhd, учитывая поддержку прокси браузерами то не особо полезно тогда)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #20 (permalink)  
Старый 17.08.2015, 18:13
Интересующийся
Отправить личное сообщение для acterhd Посмотреть профиль Найти все сообщения от acterhd
 
Регистрация: 16.08.2015
Сообщений: 23

Работает библиотека во всех браузерах, кроме Firefox.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34