«Голые слова» (barewords) — это слова без кавычек, которые вы можете использовать в качестве строк.
В JavaScript их, вроде как и нет, поэтому я попробовал их в него пропихнуть, что в целом получилось.
Получился вот такой код:
with(bareWords) {
alert(Иван + Ургант)
console.log(We, can, use, bare, words)
}
И он успешно выводил нужные фразы.А реализовано это было вот так:
try {
let self = this
window.bareWords = new Proxy({}, {
has: function(target, name) {
return !(name in self)
},
get: function(target, name) {
return name
},
})
} catch(e) {
console.error('Your browser doesn\'t support bare words.')
}
Как видите, чтобы мы смогли использовать голые слова, мы использовали такие фичи джаваскрипта, как Proxy и with.
При попытке получить свойство из this, из-за происков with, запрос идет в прокси, где мы и возвращаем строковое значение вместо злобной ошибки о отсутствии переменной.
Спасибо за внимание.
Если что, вот ссылочка на Github
Комментарии (33)
arvitaly
14.07.2017 08:36+2Да, осталось прикрутить нейронную сеть, которая будет подставлять куски кода со stackoverflow по ассоциации с введенными словами и код писать сможет любой ребенок (с) 1C
P.S. Проверять Proxy на defined с помощью try/catch жестко.
zodchiy
14.07.2017 12:52ролик из своего детства
— 2012 год.
Детство-то когда кончилось? Пару лет назад?TheShock
14.07.2017 20:19Кстати, никогда не мог понять в чем прикол с Бэтменом? "...NaNNaN Batman!"?
artalar
14.07.2017 13:43Proxy вообще практически всемогущи, но сейчас они новы и медленны, лучше их не использовать.
OlegZH
14.07.2017 14:56А когда их лучше использовать? Когда они станут старыми и быстрыми, но совсем ничего не смогут делать?
artalar
14.07.2017 15:03А когда их лучше использовать? Когда они станут старыми и быстрыми
Да. Из этого правила можно сделать исключение, если бы были полифилы. Но для прокси — это не возможно.
совсем ничего не смогут делать?
Абсолютно никакой логической связи не вижу в этих словах, поясните, пожалуйста, как возраст фичи коррелируется с ее функциональностью?
justboris
14.07.2017 14:42+1мы использовали такие фичи джаваскрипта, как Proxy и with.
Вообще, забавно получилось.
with
— это отмирающая фича, остается только для обратной совместимости и запрещена в strict mode. А Proxy — совсем новинка, только-только добравшаяся до браузеров.
Очень неожиданно встретить их вместе.
OlegZH
14.07.2017 15:02Вы разожгли мой аппетит. Теперь будет трудно уснуть, не узнав, что такое JavaScript, и с чём его едят.
rumkin
14.07.2017 15:41А еще так можно делать ленивую инициализацию. А вообще в смысле bare words лучше воспользоваться sweet.js. Правда на символ @ претендуют декораторы и похоже, что они его получат, так что придется использовать другой символ.
mitinsvyat
14.07.2017 16:05Ну там компиляция какая-то. Так не честно.
DenVdmj
15.07.2017 10:01Подобный трюк в lua даже проще чем в js. Я иногда использую lua-скрипты вместо bat-ников, очень удобно таким образом обращаться к командному интерпретатору, переменным среды, реестру, и, в частности, его разделу Shell Folders. За счет установки __index и __call в metatable объектов cmd, SF и ENV работает, например, такое:
cmd.cls() cmd.dir 'D:' cmd.chcp '1251 > nul'; cmd.pause() cmd.echo('ProgramFiles : ' .. ENV.ProgramFiles) cmd.echo('SystemDrive : ' .. ENV.SystemDrive) cmd.echo('SystemRoot : ' .. ENV.SystemRoot) cmd.echo('UserProfile : ' .. ENV.UserProfile) cmd.echo('Common Documents: ' .. SF'Common Documents') cmd.echo([[HKCU\Software\TortoiseHg: ]] .. REG[[HKCU\Software\TortoiseHg]]) cmd.pause()
maxpsyhos
Троллейбус_из_хлеба.jpg
NLO
НЛО прилетело и опубликовало эту надпись здесь