Synchronizace načítání souborů js s voláními ajax a načítání souborů js s tagem

core.js:

var core = 
{
    all:{},
    load: function(jsUrl)
    {
        $.ajaxStup({async, false});
        $.getScript(jsUrl);
    },
    init: function ()
    {

        $.getJSON('someurl', function(data)
        {
            for(key in this.all)
                alert(key);

        });
     },
     here: function(who)
     {
         this.all[who.name] = who;
     }
};
$(document).ready(function()
{
    core.init();
});

me.js

(function()
{
    core.here({name:"me", foo:"bar"});
})();  

PŘÍPAD 1:

<script type="text/javascript" src="/jquery.js"></script>
<script type="text/javascript" src="/core.js"></script>
<script type="text/javascript"> 
    core.load("/me.js");
</script>     

PŘÍPAD 2:

<script type="text/javascript" src="/jquery.js"></script>
<script type="text/javascript" src="/core.js"></script>
<script type="text/javascript" src="/me.js"></script>

Problém je v tom, že v případě 1 dostanu upozornění, jak bych měl, ale v případě 2 žádné upozornění…

Otázka tedy zní:pro <script> existuje událost zatížení štítek? Co mohu použít k synchronizaci souborů, aby fungovaly v případě 2 (při ladění v IE8 jsem si všiml, že problém řeší použití bodu přerušení)? Je něco, co mi chybí?

Odpověď

Nejsem si jistý, proč vám CASE 1 náhodou fungoval, ale zdá se, že váš problém spočívá zde:

$.getJSON('someurl', function(data)
{
    alert(core === this); // <----- false, 'this' refers to the function's scope
    for(key in this.all)
        alert(key);
});

„toto“ v javascriptu není totéž jako „toto“ v C++ nebo Java

Problém je v tom, že function(data){...} vytvoří uzávěr (s novým this). Takže uvnitř této funkce je this již neodkazuje na core , odkazuje na rozsah kontextu, ze kterého byl volán (v tomto případě někde uvnitř jQuery). Můžete to opravit ochranou this s novou proměnnou, podobně.

var self = this;
$.getJSON('someurl', function(data) {
    for(var key in self.all){
        alert(key);
    }
});

Tato otázka vás může nasměrovat správným směrem k demystifikaci this klíčové slovo v javascriptu.