aboutsummaryrefslogtreecommitdiff
path: root/files/es/components.utils.import/index.html
blob: 66f32f06e1fb38880550d9fd118885fa73bff857 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
---
title: Components.utils.import
slug: Components.utils.import
tags:
  - NeedsContent
  - XPConnect
  - páginas_a_traducir
translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.import
---
<p></p>

<p>Este método fue introducido en <a href="es/Firefox_3_para_desarrolladores">Firefox 3</a> y es usado para compartir código entre diferentes alcances(scopes) de forma sencilla. Por ejemplo, puedes importar <a href="es/XPCOMUtils.jsm">XPCOMUtils.jsm</a> para evitar copiar y pegar grandes porciones comunes de código de registración de componentes XPCOM en tus archivos de compomentes.</p>

<pre class="eval">Components.utils.import("<a class="external" rel="freelink">resource://gre/modules/XPCOMUtils.jsm</a>");
</pre>

<p>Para documentación mira <a href="es/Usando_m%c3%b3dulos_de_c%c3%b3digo_JavaScript">Usando módulos de código JavaScript</a>.</p>

<h3 id="Diferencias_con_mozIJSSubScriptLoader" name="Diferencias_con_mozIJSSubScriptLoader">Diferencias con mozIJSSubScriptLoader</h3>

<p>Las diferencias con <code><a href="/es/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozIJSSubScriptLoader" title="">mozIJSSubScriptLoader</a></code> son:</p>

<ul>
 <li>El comportamiento cuando se importa/carga el mismo código desde diferentes lugares:
  <ul>
   <li>el cargador de subscrip evalua el código especificado cada vez que es invocado, con el objeto global del llamador.</li>
   <li><code>Components.utils.import</code> evalua el código de cada módulo sólo una vez, en su propio alcance(scope).</li>
  </ul>

  <p>Por ejemplo:</p>

  <pre class="eval">var scope1 = {}, scope2 = {};
Components.utils.import("<a class="external" rel="freelink">resource://gre/modules/JSON.jsm</a>", scope1);
Components.utils.import("<a class="external" rel="freelink">resource://gre/modules/JSON.jsm</a>", scope2);
assert(scope2.XPCOMUtils === scope1.XPCOMUtils);
</pre>

  <p>...retorna <code>true</code>, mientras que:</p>

  <pre class="eval">var someURL = "<a class="external" rel="freelink">resource://gre/modules/JSON.jsm</a>";
var obj1 = {}, obj2 = {};
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
                       .getService(Components.interfaces.mozIJSSubScriptLoader);
loader.loadSubScript(someURL, obj1);
loader.loadSubScript(someURL, obj2);
assert(obj2 === obj1);
</pre>

  <p>...retorna <code>false</code>.</p>

  <p>Esto significa que <code>Components.utils.import</code> es más apropiado para compartir código (y datos?) eficientemente entre scripts JS corriendo en diferentes alcances (scopes).</p>
 </li>
 <li>El cargador de subscript acepta una URL para el código a cargar, mientras que <code>import</code> sólo acepta <code><a href="es/Usando_m%c3%b3dulos_de_c%c3%b3digo_JavaScript#Protocolo_resource:">resource:</a></code> y <code>file:</code> URIs.</li>
</ul>

<h3 id="Recursos_Adicionales" name="Recursos_Adicionales">Recursos Adicionales</h3>

<ul>
 <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=238324" title="FIXED: Implement JavaScript code-sharing module system">error 238324</a></li>
 <li>La documentación en <a href="https://dxr.mozilla.org/mozilla-central/source/js/src/xpconnect/idl/xpccomponents.idl" rel="custom">xpccomponents.idl</a></li>
 <li>Los casos de prueba en <code><a href="https://dxr.mozilla.org/mozilla-central/source/js/src/xpconnect/tests/unit/" rel="custom">js/src/xpconnect/tests/unit/</a></code></li>
</ul>