Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
onload在Javascript中是如何工作的?_Javascript_Html_Onload - Fatal编程技术网

onload在Javascript中是如何工作的?

onload在Javascript中是如何工作的?,javascript,html,onload,Javascript,Html,Onload,在《Pro HTML5游戏》一书中,有以下代码: // Load all data and images for a specific level load:function(number){ // declare a new currentLevel object game.currentLevel = { number: number, hero: [] }; game.score = 0; $('#score').html('Score: '+gam

在《Pro HTML5游戏》一书中,有以下代码:

    // Load all data and images for a specific level
load:function(number){
    // declare a new currentLevel object
    game.currentLevel = { number: number, hero: [] };
    game.score = 0;
    $('#score').html('Score: '+game.score);
    var level=levels.data[number];

    //load the background, foreground, and slingshot images
    game.currentLevel.backgroundImage=loader.loadImage("images/backgrounds/"+level.background+
    ".png");
    game.currentLevel.foregroundImage=loader.loadImage("images/backgrounds/"+level.foreground+
    ".png");
    game.slingshotImage=loader.loadImage("images/slingshot.png");
    game.slingshotFrontImage =loader.loadImage("images/slingshot-front.png");

    //Call game.start() once the assets have loaded
    if(loader.loaded){
        game.start()
    } else {
        loader.onload = game.start;
    }
}
加载程序对象如下所示:

var loader= {
loaded:true,
loadedCount:0, // Assets that have been loaded so far
totalCount:0, // Total number of assets that need to be loaded

init:function(){
    // check for sound support
    var mp3Support,oggSupport;
    var audio =document.createElement('audio');
    if (audio.canPlayType) {
        // Currently canPlayType() returns: "", "maybe" or "probably"
        mp3Support ="" != audio.canPlayType('audio/mpeg');
        oggSupport ="" != audio.canPlayType('audio/ogg; codecs="vorbis"');
    } else {
        //The audio tag is not supported
        mp3Support =false;
        oggSupport =false;
    }
    // Check for ogg, then mp3, and finally set soundFileExtn to undefined
    loader.soundFileExtn =oggSupport?".ogg":mp3Support?".mp3":undefined;
},

loadImage:function(url){
    this.totalCount++;
    this.loaded =false;
    $('#loadingscreen').show();
    var image =new Image();
    image.src =url;
    image.onload =loader.itemLoaded;
    return image;
},

soundFileExtn:".ogg",

loadSound:function(url){
    this.totalCount++;
    this.loaded =false;
    $('#loadingscreen').show();
    var audio =new Audio();
    audio.src =url +loader.soundFileExtn;
    audio.addEventListener("canplaythrough", loader.itemLoaded, false);
    return audio;
},

itemLoaded:function(){
    loader.loadedCount++;
    $('#loadingmessage').html('Loaded '+loader.loadedCount+' of '+loader.totalCount);
    if (loader.loadedCount === loader.totalCount){
        // Loader has loaded completely..
        loader.loaded=true;
        // Hide the loading screen
        $('#loadingscreen').hide();
        //and call the loader.onload method if it exists
        if(loader.onload){
            loader.onload();
            loader.onload =undefined;
        }
    }
}
我有以下问题:

1) 如果onload是一种方法,我们是否应该将其用作,例如,
ImageThatWewantLoad.onload(图像加载后我们要做的事情)
,而不是
ImageThatWewantLoad.onload=(在图像加载后做我们想做的事情)

2) 什么是
loader.onload=game.start部分(游戏是一个对象,开始是在游戏对象中定义的一个方法)到底是什么?
我想我理解了loader.onload=game.start
表示加载程序对象加载后,将调用
game.start
,但由于
game.start
是一种方法,它不应该是
loader.onload=game.start()


3) 另外,
onload
表示“浏览器接收的数据”?

属性
loader.onload
是指向函数的指针(从技术上讲,它只是一个普通指针,但我们暂时忽略它)

做:

loader.onload = game.start;
将函数
game.start
分配给指针
loader.onload

随后,在加载程序代码中,您会看到:

if(loader.onload){
    loader.onload();
    loader.onload =undefined;
}
它主要检查
loader.unload
是否分配了任何内容(
undefined
在javascript中被视为false)。如果它调用了它所指向的函数,则将指针设置回
未定义的


上面的解释掩盖了有关javascript的几个事实。但是基本上就是这样的。

属性
loader.onload
是一个指向函数的指针(从技术上讲,它只是一个普通指针,但我们暂时忽略它)

做:

loader.onload = game.start;
将函数
game.start
分配给指针
loader.onload

随后,在加载程序代码中,您会看到:

if(loader.onload){
    loader.onload();
    loader.onload =undefined;
}
它主要检查
loader.unload
是否分配了任何内容(
undefined
在javascript中被视为false)。如果它调用了它所指向的函数,则将指针设置回
未定义的

上面的解释掩盖了有关javascript的几个事实。但基本上就是这样

  • Loader是对象,
    loadImage
    是在其上定义的属性


  • 属性
    loader.onload
    是指向函数的指针(匿名)

  • loader.onload=game.start//使loader.onload指向game.start。i、 e说
    game.start()==loader.onload()

  • Loader是对象,
    loadImage
    是在其上定义的属性


  • 属性
    loader.onload
    是指向函数的指针(匿名)

  • loader.onload=game.start//使loader.onload指向game.start。i、 e说
    game.start()==loader.onload()

  • 1)
    image.onload
    本质上不是一种方法。它只是一个属性,就像执行后,
    name
    dog
    中的属性一样

    dog = { name: null };
    
    如果对象的属性包含函数,则该属性是方法。所以

    dog['bark'] = function() { console.log("Woof"); };
    
    现在我们可以执行
    dog.bark()
    来调用此方法

    如果加载图像时
    image.onload
    是一种方法(即,如果它包含函数),则浏览器将运行该方法。它不是一个让我们去调用的方法,而是让我们去定义

    2) 它完全按照它看起来的样子执行-将
    游戏的内容分配给
    加载器.onload
    (一个函数)。现在,两个属性都引用相同的函数。如果我们执行了
    loader.onload=game.start()
    ,它将执行
    game.start
    ,并将执行结果分配给
    loader.onload
    ;但是我们想要分配函数本身,所以没有括号。

    1)
    image.onload
    本质上不是一种方法。它只是一个属性,就像执行后,
    name
    dog
    中的属性一样

    dog = { name: null };
    
    如果对象的属性包含函数,则该属性是方法。所以

    dog['bark'] = function() { console.log("Woof"); };
    
    现在我们可以执行
    dog.bark()
    来调用此方法

    如果加载图像时
    image.onload
    是一种方法(即,如果它包含函数),则浏览器将运行该方法。它不是一个让我们去调用的方法,而是让我们去定义


    2) 它完全按照它看起来的样子执行-将
    游戏的内容分配给
    加载器.onload
    (一个函数)。现在,两个属性都引用相同的函数。如果我们执行了
    loader.onload=game.start()
    ,它将执行
    game.start
    ,并将执行结果分配给
    loader.onload
    ;但是我们希望分配函数本身,因此没有括号。

    JavaScript中的Onload可以描述为:

  • 这里的onload是作为属性访问的,我们用函数的结果分配属性。因此,将执行函数,并将最终结果分配给属性。因此,基本上函数调用和将结果分配给属性是在一行代码中同时完成的

  • 在本例中,我们希望通过检查loader.loaded属性来了解loader onload方法是否已执行。如果已执行,则调用game.start(),而不指定任何函数,以便在onload方法执行时按顺序执行。如果它没有执行,那么我们已经将game.start函数分配给loaded.onload函数,因此我们使用它们作为属性将函数分配给另一个函数,因此现在当调用onload方法时,它将执行game.start()函数,因为onload被game.start替换

  • Onload表示对象已加载。我们在html的body标记中使用onload事件来知道网页已经加载了所有内容,我们现在可以执行我们的操作以顺利运行


  • JavaScript中的Onload可以描述为: