2016-12-18 6 views
0

問題が何であるか把握するのに役立つ人がいますか?「TypeError:未定義(...)のプロパティ 'draw_map'機能なぜこのオブジェクトで未定義のプロパティを読み取ることができませんか?

Maps = function(...) { ... } 

が自己オブジェクトを返さないため

おそらくあなたがそうCH構築機能としてそれを使用したい

おそらく
$(document).ready(function() { 

Maps = function(id, img_src, width, height) { 
    var self = { 
     id: id, 
     img: new Image(), 
     width: width, 
     height: height 
    } 

    self.img.src = img_src; 

    self.draw_map = function() { 
     ctx.drawImage(self.img, 0, 0, self.img.width, self.img.height, 100, 100, self.img.width * 2, self.img.height * 2); 
    } 
} 

function update_canvas() { 

    current_map.draw_map(); 

} 

/////////////////////////////////////////// 

// get context to draw on canvas 
var canvas = document.getElementById("canvas"); 
var ctx = canvas.getContext("2d"); 

// Load Image for map 
var current_map = Maps("field", "img/dirt.jpeg", 120, 480); 

// Drawing 
setInterval(update_canvas, 500); 

}); // End of Document.ready 
+0

'VARのcurrent_mapは=新しいマップ( "フィールド"、 "IMG/dirt.jpeg"、120、480);' – Mahi

+0

私は新しいを追加しようとしたと私は「current_mapを取得します。 draw_mapは関数ではありません(...) " – Durka

答えて

0

:ブラウザに以下のコードを実行するときアンジュnew演算子を使用して、この行:

ここ

var current_map = new Maps("field", "img/dirt.jpeg", 120, 480);

+1

これは私のために働いた。私は 'code' return selfを追加しました。関数の最後に 'code'とそれが働いた!ありがとう。 – Durka

+0

新しい演算子なし彼はobject.soを作成していますjsの 'new'キーワードの使用 – Mahi

+1

@Mahi新しいだけでは不十分です。さもなければ、彼は関数の最後に自己を返すだけで、Mapを通常の関数として使用する必要があります。 – ema

0

は(コメントアウトHTML要素を持つ)作業コードです。問題は、関数コンストラクタ内で参照を使用していないことと、new演算子を使用してインスタンスを作成していないことです。

$(document).ready(function() { 
 

 
Maps = function(id, img_src, width, height) { 
 
    this.id = id; 
 
    this.width = width; 
 
    this.height = height; 
 
    this.img = new Image() // replace with your Image 
 
    this.img.src = img_src; 
 
    var self = this; // Required for the draw_map function 
 

 
    this.draw_map = function() { 
 
     
 
     console.log("Draw image", self.img.width, self.img.height); 
 
     // Uncomment in your code: ctx.drawImage(self.img, 0, 0,  self.img.width, self.img.height, 100, 100, self.img.width * 2, self.img.height * 2); 
 
    } 
 
} 
 

 
function update_canvas() { 
 

 
    current_map.draw_map(); 
 

 
} 
 

 
/////////////////////////////////////////// 
 

 
// get context to draw on canvas. Uncomment 
 
//var canvas = document.getElementById("canvas"); 
 
//var ctx = canvas.getContext("2d"); 
 

 
// Load Image for map 
 
var current_map = new Maps("field", "img/dirt.jpeg", 120, 480); 
 
// Drawing 
 
setInterval(update_canvas, 500); 
 

 
}); // End of Document.ready
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

関連する問題