I am trying to use class on drawImage function.
But it seems that drawImage function couldn't get the attribute img of variable monster.
I have no idea what would caused this error.
Not quite understand why browser give me the below error code ... please help me.
Uncaught TypeError: Cannot read property 'img' of undefined.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Tower Defense</title>
    <style>
        canvas {
            padding: 0;
            margin: auto;
            display: block;
        }
    </style>
</head>
<body>
    <script>
        var canvas = document.createElement("canvas");
        var ctx = canvas.getContext("2d");
        canvas.width = 500;
        canvas.height = 500;
        document.body.appendChild(canvas);
        function Monster(img, x = 0, y = 0, w,h) {
            this.img = img;
            this.x = x;
            this.y = y;
            this.w = w;
            this.h = h;
        }
        var monster;
        var DrawMonster = function(mons) {
            ctx.drawImage(mons.img, mons.x, mons.y, mons.w, mons.h);
        }
        var PreLoadImages = function() {
            var img = new Image();
            img.addEventListener("load", function() {     // or img.onload = function() { ...
                monster = new Monster(this, 0, 0, 100, 100);            
            });
            img.src = "res/Mons_Pirate.jpg";
        }
        PreLoadImages();
        DrawMonster(monster);
    </script>
</body>
</html>
Please change the link (res/Mons_Pirate.jpg) of image while testing.
 
     
    