2016-04-09 17 views
0

olmamalıdır. Bu yüzden bir HTML5 oyunu yapıyorum ve tuval üzerine düğmeler yapmak istiyorum.Tuval dikdörtgenler x ve y ile aynıdır ama

benim işlevi benim kodunda başka bir yerde, bir düğme yapmak için var
 Button = function(text, x, y, width, height){ 
      self.x = x; 
      self.y = y; 
      self.width = width; 
      self.height = height; 

      self.createButton = function(){ 
       ctx.save(); 
       ctx.fillStyle = "yellow"; 
       ctx.fillRect(self.x, self.y, self.width, self.height); 

       ctx.fillStyle = "black"; 
       ctx.font = '30px Arial'; 
       ctx.fillText(self.text, self.x, self.y + (self.height/2)); 

       ctx.restore(); 
      } 

     self.createButton(); 

     return self; 
    } 

Ben iki düğme yapmak -

 var button1 = Button('Button 1', WIDTH/2, HEIGHT/2, 200, 40); 

     var button2 = Button('Button 2', WIDTH/2, (HEIGHT/2) + 50, 200, 40); 

     console.log('button1 x: ', button1.x); 
     console.log('button1 y: ', button1.y); 


     console.log('button2 x: ', button2.x); 
     console.log('button2 y: ', button2.y); 
düğmeleri ayrı ayrı çiziliyor rüzgar

.. ama x ve ys dışarı teselli zaman Kodda ikisi de aynıdır.

cevap

1

Düğmeler ayrı ayrı çizilir. Ancak, koddaki x ve ys'yi birleştirdiğimde ikisi de aynıdır. Eğer küresel değişken self, which already exists, and refers to the window object değer atamak çünkü olduğunu

.

Yani, düşündüğünüz gibi burada ayrı değişkenlerle çalışmıyorsunuz, ama aynı ve her biri ile x, y,… özelliklerini üzerine yazıyorsunuz.

bir yerel değişken oluşturmak ve boş bir nesne olarak başlatmak için, sizin fonksiyonu içine ilk satırı olarak bu yerleştirin: (boş) bir nesne olarak başlatılıyor olmadan

var self = {}; 

, bir alacağı Uncaught TypeError: Cannot set property 'x' of undefined gibi bir şey söyleyerek hata mesajı. Bunu yalnızca kodunuzla almadıysanız, self zaten var olan bir nesnedir.

Ancak karışıklıktan kaçınmak için, başlamak için farklı bir değişken adı seçmek daha iyi olabilir; bunun yerine, _self kullanarak, başvuruyu bir nesnenin içine depolamak oldukça yaygındır.

+0

ahhhh tamam bu mantıklı. çok teşekkürler. – joe

İlgili konular