Как писать proposals в ecmascript?

1. Есть-ли способ в js каррировать функцию без изменения контекста? Т.е. для f.bind(ctx, ..args) ctx обязателен, поэтому написать самому частичное применение тоже не получилось.

2. Намечается-ли такое в ES Harmony или Strawman? Если нет - можно-ли писать proposals для ecmascript, не состоя в группе TC39?
  • Вопрос задан
  • 2705 просмотров
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А в чем проблема писать так:
function sum(x) {
    return function (y) {
        return sum(x + y);
    }
}


Единственное что привносится в этом ключе в JS - это лямбда функции (которые arrow functions), которым нельзя поменять контекст. То есть при вызове функции через apply/call, или же использовании bind, задаваемый контекст не будет применен.
Ответ написан
Комментировать
В es6 / harmony / strawman не намечается. Писать пишите, но всем наплевать. Частичное применение без смены контекста в стиле .bind реализуется элементарно:

Function.prototype.part = function(){
  var fn   = this
    , args = [].slice.call(arguments);
  return function(){
    return fn.apply(this, args.concat([].slice.call(arguments)));
  }
}

Каррирование чуть сложнее, но в том же духе. Хорошая статья по этому делу тык.
Ответ написан
Комментировать
Не хочу вас переубеждать, но `контекст` и `карринг` - вещи не совместимые, и не из-за невозможности, а в силу идеологии. Первое это обьекты, свойства и методы. А второе это функции и аргументы.
Если хотите смешать, то как написали - через создание делегата. в ес6 немного проще:
function delegate(fn, ...base) {
	return function(...args){
		return fn.call(this, ...base, ...args);
	}
}
Ответ написан
Комментировать
Что касается proposals, текущие черновики es7+ находятся здесь. Там же есть ссылка на документ с описанием процесса стандартизации, в том числе приёма новых предложений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы