2015-11-05 8 views
2

/Что означает ключевое слово WITH в JS?/Что означает ключевое слово WITH в JS?

with(object)command; 
+0

Когда и где я могу использовать это ключевое слово WITH? –

+1

Что-то, что вы не должны использовать. Вы даже использовали Google? – ergonaut

+1

Вы можете найти ответ здесь http://stackoverflow.com/questions/1931186/with-keyword-in-javascript – prdtuty

ответ

1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with

«JavaScript ищет неизвестное имя путем поиска цепочки области, связанную с контекстом выполнения сценария или функции, содержащим что неквалифицированным имя.„С“заявление добавляет заданный объект руководителю этой цепочки областей видимости при оценке своего тела оператора. Если неквалифицированное имя, используемое в теле, соответствует свойству в цепочке областей видимости, то имя привязано к свойству и объекту, содержащему это свойство. В противном случае a Вызывается ReferenceError. "

obj = {'when': 'now'} 
with (obj) { 
    console.log(when) 
} 
+0

Я попытался включить «дайте мне Google, что для вас», и это дало мне ошибку. ; _; – DataHerder

1

Позволяет свойства объекта обрабатывать как локальные переменные в инструкции.

var obj = { text: "testing" }; 
with (obj) { 
    console.log(text); 
} 

вместо

var obj = { text: "testing" }; 
console.log(obj.text); 

Это является устаревшим и запрещен в строгом режиме.

1

с тем, чтобы создать блок, ограниченный областью действия объекта. Что-то вроде:

var obj = {a: 1,b: 2, c: 3}; 

// more "tedious" to repeat "obj" 
obj.a = 2; 
obj.b = 3; 
obj.c = 4; 

// "easier" short-hand 
with (obj) { 
    a = 3; 
    b = 4; 
    c = 5; 
} 

Но это создавало массу проблем. Это проблемы хорошо объяснены в главе 2 книги Кайла Симпсона «Сфера & Закрытие» в «Вы не знаете JS». Я рекомендую вам прочитать его. Специально не используйте его, если вы не очень хорошо знаете, что делаете, или это может стоить вам тяжело отслеживать ошибки.

1

расширяет сферу цепочки для заявления

Расширенные цепи, вероятно, что мы любим больше о библиотеках JavaScript ...

$("stuff") 
    .more() 
    .again() 
    .somethingElse() 
; 

, но по какой-то садистской причине мы решили, что нам не нравится родной протяженные цепи в нашем коде ...

with(stuff){ 
    more() 
    again() 
    somethingElse() 
}; 

Плохие Примеры А Плохое использование

Каждый раз, когда я говорю, что с утверждением ничего плохого, кто-то постоянно указывает на эту кровавую почту ... ОК, из Yahoo! ... И что? Честно говоря, я могу опубликовать тысячи плохих примеров и указать пальцем на ту или иную библиотеку, функцию, метод, оценку и т. Д. И т. Д. ... это похоже на миф eval - это зло ... так как получилось, что один из первых говорить о зле использует eval для ускорения интерпретации кода? Легко: есть случаи и случаи!


Сила с() {}

я дам вам самый простой пример когда-либо, что-то случилось в твиттере несколько минут назад, хорошо? Я хочу использовать наименьшее количество символов, чтобы получить инъекцию скрипта ... правильно?

with(document.documentElement) 
    insertBefore(
    document.createElement("script"), 
    firstChild 
) 
    .text = "alert(1)" 
; 

Изящные, память осведомленные (без переменных деклараций, нет необходимости создавать замыкание), компактный, эффективный, кросс-браузер ... где «JavaScripters», которые используются с для назначения переменных здесь?

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


Смежные вопросы