Подтвердить что ты не робот

Что делает <| в этом коде означает?

function foo() {}
var bar = foo <| function() {};

Это первый раз, когда я увидел что-то подобное. Что означает <|?

Источник: https://github.com/allenwb/ESnext-experiments/blob/master/ST80collections-exp1.js

4b9b3361

Ответ 1

Теперь, когда вы разместили ссылку на источник, вы можете увидеть в комментариях в верхней части файла именно то, что он делает (строка 36):

the < | оператор - определяет [[Прототип]] литерала...

Для этих примеров &lt | | используемый с выражением функции, устанавливает [[Prototype]] объекта, созданного как значение функции "prototype" для свойства свойства "prototype"объект LHS. Это в дополнение к установке [[Prototype]] сам объект функции. Другими словами, он создает множество [[Прототип]] как функции, так и функции. потенциально разные значения.

Обновление: Я только что вспомнил этот вопрос, когда я встретил предложение полного предложения ECMAScript Harmony для этого "литерального [[Prototype]] оператора" . Там гораздо больше информации, чем в приведенной выше цитате, поэтому стоит прочитать.

Ответ 2

Похоже, что это должно быть

function foo() {}
var bar = foo || function() {};

который присваивает foo бару, если foo определен и назначает пустую функцию в противном случае.

О ссылке, которую вы отправили позже, она по-прежнему недействительна Javascript. Проект README объясняет цель файла.

Этот проект содержит файлы примеров различных языковых расширений которые рассматриваются для включения в следующие выпуски Спецификация языка ECMA. Целью примеров является проверка полезности, возможности записи и удобочитаемости предлагаемых функций. Там есть нет никакой гарантии, что любой из них действительно будет включен в язык.

Описание предлагаемой функциональности скопирует строки кода, вставленные в ваш вопрос.

the <| operator -- defines the [[Prototype]] of a literal

/* Quote that James posted */

function foo() {};
const bar = foo <| function() {};

Object.getPrototypeOf(bar)===foo; //true
Object.getPrototypeOf(bar.prototype)===foo.prototype;  //true