Существуют ли законные варианты использования оператора «with» в JavaScript? - PullRequest
361 голосов
/ 14 сентября 2008

комментарии Алана Сторма в ответ на мой ответ относительно заявления with заставили меня задуматься. Я редко находил причину использовать эту особенность языка и никогда не задумывался над тем, как это может вызвать проблемы. Теперь мне интересно, как я мог бы эффективно использовать with, избегая при этом его ловушек.

Где вы нашли выражение with полезным?

Ответы [ 31 ]

0 голосов
/ 20 января 2013

Вот хорошее применение для with: добавление новых элементов в литерал объекта на основе значений, хранящихся в этом объекте. Вот пример, который я только что использовал сегодня:

У меня был набор возможных плиток (с отверстиями вверху, внизу, влево или вправо), которые можно было использовать, и я хотел быстро добавить список плиток, которые всегда будут помещаться и блокироваться в начале. игры Я не хотел продолжать набирать types.tbr для каждого типа в списке, поэтому я просто использовал with.

Tile.types = (function(t,l,b,r) {
  function j(a) { return a.join(' '); }
  // all possible types
  var types = { 
    br:  j(  [b,r]),
    lbr: j([l,b,r]),
    lb:  j([l,b]  ),  
    tbr: j([t,b,r]),
    tbl: j([t,b,l]),
    tlr: j([t,l,r]),
    tr:  j([t,r]  ),  
    tl:  j([t,l]  ),  
    locked: []
  };  
  // store starting (base/locked) tiles in types.locked
  with( types ) { locked = [ 
    br,  lbr, lbr, lb, 
    tbr, tbr, lbr, tbl,
    tbr, tlr, tbl, tbl,
    tr,  tlr, tlr, tl
  ] } 
  return types;
})("top","left","bottom","right");
...