Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   JS.next(стандарты, фичи, движки) (https://javascript.ru/forum/offtopic/50248-js-next-standarty-fichi-dvizhki.html)

cyber 16.01.2015 15:40

kobezzza, спасибо:)

kobezzza 20.01.2015 21:41

В ES7 планируется добавить специальный способ обращения к символьным свойствам объекта через ::, например,

foo::some()


Как по мне, то данная фича очень нужна и я считаю, что все встроенные свойства и методы Object.prototype должны быть продекларированы именно так, например,

for (let key in foo) {
    if (foo::getOwnPropertyDescriptor(key)) {
        ...
    }
}


Это уберёт потенциальные ошибки при использовании объекта, как таблицы.

function foo(params) {
    if (params.toString) {
        alert('ffffuuuuu');
    }
}

foo({});


А вот если бы базовый метод toString был бы символьный и доступен через :: то такой бы ошибки не было, а проблемы совместимости старого кода можно решить флагом:

'use es7-strict';


По аналогии с useAsm и useStrict.

К слову, символьные свойства были введены как раз, чтобы можно было безопасно расширять прототипы объектов, в частности и Object.prototype.

Aetae 21.01.2015 00:50

Какое-то lua, но через жопу, имхо. Проблема то понятна, как и необходимость решения, но вот само решение выглядит по мне как-то уродливо...

Octane 21.01.2015 09:58

Цитата:

Сообщение от kobezzza
В ES7 планируется добавить специальный способ обращения к символьным свойствам объекта через ::, например,
foo::some()

ведь Symbol.iterator === Symbol('iterator') → false, как тогда обращаться к символьным-свойствам, если я сделаю так:
let obj = {
    [Symbol('some')]: 1,
    [Symbol('some')]: 2
};

что должен вернуть obj::some?

Скорее всего это просто короткая запись для
obj[Symbol.iterator] → obj::iterator
obj[Symbol.toStringTag] → obj::toStringTag
obj[Symbol.toPrimitive] → obj::toPrimitive
…
и т.д.
тоесть всегда на well-known symbols будет ссылаться

kobezzza 21.01.2015 10:12

Octane, https://github.com/zenparsing/es-abstract-refs

PS: Перечитав драфт понял, что сам его не до конца понял :) Подождём пару лет, пока реализуют ES7 :)

UPD: Прочитал https://github.com/zenparsing/es-function-bind и понял, что здесь работа не с символьными свойствами (как я изначально думал), а API для биндинга функций к объекту, т.е. сахар для паттерна заимствования.

Array.prototype.slice.call(...)


Если это так, то это вообще мегакруто, т.к. решает проблему расширения базовых объектов и даёт новый способ для code-reuse!

cyber 23.01.2015 01:06

Перевидите на человеческий язык (то что выделенно) что за "шаблоны деструктуризации" ?
Цитата:

Так как «собственный» объект arguments не доступен внутри стрелочной функции (значение arguments лексически связано со значением arguments традиционной функции, внутри которой стрелочная функция была объявлена), то для стрелочных функций с переменным числом параметров нужно использовать rest-паттерн из шаблонов деструктуризации
var getTempItems = (...rest) => rest;
// эквивалент
var getTempItems = function() { return [].slice.apply(arguments) };



Еще не вкурю почему не работает

let params = {};
let { params: size = { height:50 } } = {
   width: 100
};


В еs6 есть что то типо __proto__ или уже можно __proto__ юзать?

Safort 23.01.2015 01:54

cyber,
оно делает работу с переменным количеством аргументов немного удобнее

Следующий пример сработает во всех нормальных браузерах, т.е. в панде.
var func = (a, ...others) => {
  console.log(a, others);
};
func(1,2,4,5);

Safort 23.01.2015 01:56

cyber,
Цитата:

В еs6 есть что то типо __proto__ или уже можно __proto__ юзать?
С этим у меня тоже путаница. В одной статье читал, что __proto__ стандартизировали, а в другой, что наоборот, отказались от него. Но если уж мы говорим о ES6, то зачем тебе вообще __прото__?)

cyber 23.01.2015 02:18

Цитата:

Сообщение от Safort
Но если уж мы говорим о ES6, то зачем тебе вообще __прото__?)

Ну я ещё не решился на использование классов, а вообще просто интересно. Видел на mdn что оно поддерживается всеми браузерами, а ие 11+

И как включить поддержку arrow functions в хроме, я поставил флаг harmony и нефига

Octane 23.01.2015 02:54

хз никуда __proto__ не делся:
http://people.mozilla.org/~jorendorf...type.__proto__
http://people.mozilla.org/~jorendorf...t-initializers

в ES6 добавили возможность использовать __proto__ прямо в литерале:
var obj = {
   0: 1,
   1: 2,
   length: 2,
    __proto__: Array.prototype
};

obj.forEach(x => alert(x));


а вообще есть setPrototypeOf/getPrototypeOf


Часовой пояс GMT +3, время: 18:52.