Değişkenlere başka bir dosyadan erişebilir miyim?


179

first.jsAdlı başka bir dosyanın içinde adlandırılan bir dosyada değişken kullanmak mümkün müdür second.js?

first.jsadlı bir değişken içeriyor colorcodes.


@Roki: Örneğin, başka bir web sitesinden veri yüklerken, bunları işlemek için komut dosyası sitenizdeyken:<script src="http://datasource.example.net/first.js"></script><script src="second.js"></script>
Piskvor,

veri kaynağı sitesinin geri araması yok mu? ne demek: download second.js içerir: ... function secondscriptFn (o) {// bir şeyler yapmak / w veri; } ... indir datasource.example.net/first.js?callback=secondscriptFn sonra şunu içerir: secondscriptFn ({back: "# fff", ön: "# 888", side: "# 369"}); first.js kapsamını kontrol edebildiğiniz için global kapsam sürümlerinden daha kontrol edilebilir ve sağlam ...
Roki

4
Not: jQuery kullanıyorsanız ve bunu yapmaya çalışıyorsanız. '$ (Document) .ready ()' işlevindeki ilk dosyadan erişmeye çalıştığınız değişkeni koymadığınızdan emin olmalısınız; aksi takdirde en azından tecrübelerimden düzgün yüklenmez.
Collin McGuire

Yanıtlar:


198

Fermin'in dediği gibi, global kapsamdaki bir değişken bildirildikten sonra yüklenen tüm komut dosyalarına erişebilmelidir. Aynı etkiyi elde etmek için windowveya öğesinin (global kapsamda) bir özelliğini de kullanabilirsiniz this.

// first.js
var colorCodes = {

  back  : "#fff",
  front : "#888",
  side  : "#369"

};

... başka bir dosyada ...

// second.js
alert (colorCodes.back); // alerts `#fff`

... html dosyanızda ...

<script type="text/javascript" src="first.js"></script> 
<script type="text/javascript" src="second.js"></script> 

6
Bir tarayıcıda, window olduğu window.colorCodes ve (genel) nesne colorCodes aynı nesne yani - küresel kapsamı.
Piskvor binadan ayrıldı

Doğru ... bahsetmemin sebebi, global olmayan bir kapsamdan küresel bir değişken belirlemeniz gereken durumlar içindir.
Dagg Nabbit

2
html ne olacak? html var: <script>var variable1 = true;</script> <script src="first.js"></script>first.js bu değişkeni görecek mi? Google Chrome uzantısında test ettim ve işe yaramadı
user25

@ user25, aynı problemim var, bir çözüm buldunuz mu?
Mercury

2
Eslint kullanıyorsanız, /* global colorCodes */"... tanımlı değil" hata mesajını önlemek için yukarıdaki satıra ekleyebilirsiniz
Joseph K.

41

Dışa aktarmayı kullanarak değişkeni ilk dosyadan dışa aktarabilirsiniz .

//first.js
const colorCode = {
    black: "#000",
    white: "#fff"
};
export { colorCode };

Ardından, import komutunu kullanarak değişkeni ikinci dosyaya alın .

//second.js
import { colorCode } from './first.js'

ihracat - MDN


14

Yukarıdaki cevabın hoşuna gitti ama benimle çalışmadı.

çünkü declaringbu değişkenlerim insideJQuery$( document ).ready()

<script>etiketin içindeki değişkenlerinizi başka bir yerde belirtmediğinizden emin olun


13

Bu, - birinci dosyada genel bir değişken tanımlamalı ve ona ikinci dosyadan erişmelidir:

<script src="/firstfile.js"></script>
<script src="/secondfile.js"></script>

firstfile.js:

var colors = {
   text:'#000000',
   background:'#aaaaaa',
   something_else:'blue'
};

secondfile.js:

do_something_with(colors.background);

Komut dosyası dosyalarını yükleme sıranızın bazı tarayıcılar için önemli olduğunu unutmayın (IE6 kesin, belki diğerleri)


1
Bu değişkeni nesneye aşağıdaki gibi eklemeniz gerekebilir: this.colors = colors. Eğer bir numaralandırma yerine bir nesne ise, sadece değeri döndürmek için bir işlev yapabilirsiniz. this.getTextColor = function () {dönüş renkleri.metin; };
aggaton

1
yüklü bir sayfadan bir değişkeni nasıl güncellersiniz? <script type = "text / javascript"> colors.background = "yeni sütun"; </script> çalışmıyor gibi görünüyor.
v3nt

6

Node.js'yi kullanarak değişkeni modül aracılığıyla dışa aktarabilirsiniz.

//first.js
const colorCode = {
    black: "#000",
    white: "#fff"
};
module.exports = { colorCode };

Ardından, modülü / değişkeni gerektiren kullanarak ikinci dosyaya alın.

//second.js
const { colorCode } = require('./first.js')

Webpack / Babel kullanarak ES6'nın importve exportyaklaşımını kullanabilirsiniz , ancak Node.js'de bir bayrağı etkinleştirmeniz ve .mjs uzantısını kullanmanız gerekir.


3

Ben amplify.js ile karşılaştım . Kullanımı gerçekten çok basit. Bir değeri saklamak için buna "myValue" diyelim, şunları yapabilirsiniz:

amplify.store("myKey", "myValue")

Ve ona erişmek için

amplify.store("myKey")

2

Renk kodlarınızı global bir değişkende saklarsanız, javascript dosyasından her ikisine de erişebilmeniz gerekir.


2

Bunu biraz farklı yapıyor olabilirim. Bu sözdizimini neden kullandığımdan emin değilim, uzun zaman önce bir kitaptan kopyaladım. Ama benim js dosyalarımın her biri bir değişken tanımlar. İlk dosyaya, hiçbir nedenle, R denir:

    var R = 
    { 
        somevar: 0,
        othervar: -1,

        init: function() {
          ...
        } // end init function

        somefunction: function(somearg) {
          ...
        }  // end somefunction

        ...

    }; // end variable R definition


    $( window ).load(function() {
       R.init();
    })

Ve sonra ayırmak istediğim büyük bir kod parçam varsa, ayrı bir dosyaya ve farklı bir değişken adına koydum, ancak yine de R değişkenlerine ve işlevlerine başvurabilirim. Yeni TD'yi hiç iyi bir sebep olmadan aradım:

    var TD = 
    { 
        xvar: 0,
        yvar: -1,

        init: function() {
           ...
        } // end init function

        sepfunction: function() {
           ...
           R.somefunction(xvar);
           ...
        }  // end somefunction

        ...

    }; // end variable TD definition


    $( window ).load(function() {
       TD.init();
    })

Gördüğünüz gibi TD 'ayrılığı' nda R.somefunction diyorum. Her iki komut dosyasının da yüklenmesi gerektiğinden bunun herhangi bir çalışma zamanı verimliliği sağlamadığını anlıyorum, ancak kodumu düzenli tutmama yardımcı oluyor.


0

En iyi yollardan biri pencereyi kullanmaktır. BAŞLANGIÇ HALİ

<script src="/firstfile.js">
    // first.js
    window.__INITIAL_STATE__ = {
      back  : "#fff",
      front : "#888",
      side  : "#369"
    };
</script>
<script src="/secondfile.js">
    //second.js
    console.log(window.__INITIAL_STATE__)
    alert (window.__INITIAL_STATE__);
</script>

Bu yaklaşımın diğer cevaplara göre avantajı nedir?
Boric
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.