LINUX.ORG.RU

Javascript with

 


0

1

Чем плох with? В гугле пишут, что эта инструкция может усложнить понимание кода, при не правильном обращении могут появиться ошибки. Webstrom подсвечивает как варнинг.

Как мне показалось, with довольно удобная конструкция.

var person = {
	name: 'anon',
	age: '20',
	gender: 'M'
};

var props = '';
with (person) {
	props = 'name=' + name + ';age=' + age + ';gender=' + gender;
}


Потому что он не нужен

let person = {
	name: 'anon',
	age: '20',
	gender: 'M'
}

let props = (p => `name=${p.name};age=${p.age};gender=${p.gender};`)(person)
anonymous ()
Ответ на: комментарий от anonymous

да, стало читабельней)) не дают юзать es6 на работе(

RA ()
Ответ на: комментарий от zz

Так ты засрешь скоуп (еще и константами), да и не решишь задачу по сериализацию в строку.

Можно деструктурировать то же самое в аргументах, но тогда придется дважды писать названия пропертей. Зачем?

anonymous ()
Ответ на: комментарий от anonymous

Ну форматировать строку в IIFE тоже такой себе вариант. Деструктировать ирл достаточно часто удобно.

zz ★★★★ ()
Ответ на: комментарий от anonymous

Олсо раз уж мы на es6 волне, то скоуп не засорять не трудно:

{ const {name, age, gender} = person }

zz ★★★★ ()

Чтобы ее использовать, надо очень хорошо понимать, как он работает, как перекрываются неймспейсы, как происходят присваивания и тд. Поскольку большинство разрабов этих тонкостей не понимают, рекомендуется ее не использовать. В целом это опасная конструкция. Кроме того, есть проблемы с оптимизацией кода с with

noconformism ()
Ответ на: комментарий от noconformism

Чтобы ее использовать, надо очень хорошо понимать, как он работает, как перекрываются неймспейсы, как происходят присваивания и тд.

например

o1 = {foo: undefined}
o2 = Object.create(o1)

with(o2) {
  foo = 10
  bar = 20
}

console.log(o2.foo, o2.bar, global.foo, global.bar)
//>>>>10 undefined undefined 20

noconformism ()

Безотносительно `with` — мне интересно, что будет с твоим кодом, если пользователя будут звать «Little Bobby Tables» ^W^W^W «John;Doe».

ChALkeR ★★★★★ ()
Ответ на: комментарий от anonymous

Я, конечно, извиняюсь, но этот код — херота. Не надо так делать.

Вот это и яснее, и ровно такой же длины:

let props = `name=${person.name};age=${person.age};gender=${person.gender};`

Но логика мне всё равно не нравится.

ChALkeR ★★★★★ ()
Последнее исправление: ChALkeR (всего исправлений: 2)
Ответ на: комментарий от ChALkeR

Извини, что так долго не отвечал. Как пользователь с именем «John;Doe» попадет в мою систему? Дело в том, что такое имя не валидно и смысла не имеет. Хотя интересно смогут ли человеку в паспортном в графу имя написать «Иван;Иванов» а в графу фамилии просто «Иванов». Представь сколько систем сломается))

RA ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.