with

UWAGA: Tłumaczenie tej strony nie zostało zakończone.
Może być ona niekompletna lub wymagać korekty.
Chcesz pomóc? | Dokończ tłumaczenie | Sprawdź ortografię | Więcej takich stron+.

Podsumowanie

Rozszerza granicę zasięgu dla instrukcji.

Instrukcja
Zaimplementowana w: JavaScript 1.0, NES 2.0
Wersja ECMA: ECMA-262

Składnia

with (obiekt)instrukcja

Parametry

obiekt
Dodaje podany obiekt do granicy zasięgu, gdy oceniana jest instrukcja. Nawiasy wokół parametru są wymagane.
instrukcja
Instrukcja. Aby wykonać większą ilość instrukcji wewnątrz pętli, użyj instrukcji block ({ ... }), aby pogrupować te instrukcje.

Opis

JavaScript sprawdza an unqualified name by searching a scope chain associated with the execution context of the script or function containing that unqualified name. The 'with' statement adds the given object to the head of this scope chain during the evaluation of its statement body. If an unqualified name used in the body matches a property in the scope chain, then the name is bound to the property and the object containing the property. Otherwise a 'ReferenceError' is thrown.

Note: Firefox 1.5 generates a warning when the 'with' statement is used: "deprecated with statement usage". This has been removed in Firefox 1.5.0.1 (błąd 322430).

Peformance Pro & Con

  • Pro: 'with' can help reduce file size by reducing the need to repeat a lengthy object reference without performance penalty. The scope chain change required by 'with' is not computationally expensive. Use of 'with' will relieve the interpreter of parsing repeated object references. Note, however, that in many cases this benefit can be achieved by using a temporary variable to store a reference to the desired object.
  • Con: 'with' forces the specified object to be searched first for all unqualified name lookups. Therefore all identifiers that match formal function argument and declared local variable names will be found more slowly in a 'with' block. Where performance is important, 'with' would likely only be used to encompass code blocks that do not use function argument and declared local variable identifiers.

Ambiguity Con

  • Con: 'with' makes it hard for a human reader or JavaScript compiler to decide whether an unqualified name will be found along the scope chain, and if so, in which object. So given this example:
    function f(x, o) {
      with (o)
        print(x);
    }
    

    only when f is called is x either found or not, and if found, either in o or (if no such property exists) in f's activation object, where x names the first formal argument. If you forget to define x in the object you pass as the second argument, or if there's some similar bug or confusion, you won't get an error -- just unexpected results.

Przykłady

Przykład: Zastosowanie with

Poniższa instrukcja with określa, że obiekt Math jest obiektem domyślnym. Instrukcje następujące po instrukcji with odnoszą się do własności PI oraz metody cos i sin bez określania obiektu. JavaScript przyjmuje obiekt Math dla tych odniesień.

var a, x, y;
var r = 10;
with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

 

 

Autorzy i etykiety dokumentu

Autorzy tej strony: Ptak82, splewako, Diablownik, Mgjbot
Ostatnia aktualizacja: splewako,