Küçük retro tarzı bir yan kaydırma alanı shooter oyunu üzerinde çalışıyorum (ya da yine de bu teori budur) ve son zamanlarda ayrı birimin yönetimi için IIFE'leri kullanmaya başladım. sınıflar. Ancak, gördüğüm örneklerin çoğu, değişkenleri bildirirken var
'u kullanma eğilimindedir, E.g, var x = 0
. Yine de merak ediyorum, this.x = 0
kullanmak mümkün mü ve eğer varsa, herhangi bir yarar veya dezavantajları var mı?IIFE kurucudaki 'This' i kullanma
Konuyla uğraşmayı denedim ve konuyla ilgili fazla bir şey bulamadım. Bu da sorun olmadığını düşünmemi sağlıyor.
Sınıflarım aşağıdaki gibidir;
var Player = function() {
// ------------------------------------------------------------------------------------------------
// PLAYER VARIABLES
// ------------------------------------------------------------------------------------------------
var w = 50;
var h = 50;
var x = 0;
var y = 0;
var color = 'white';
var projectiles = [];
// ------------------------------------------------------------------------------------------------
// BIND EVENTS TO THE GLOBAL CANVAS
// ------------------------------------------------------------------------------------------------
Canvas.bindEvent('mousemove', function(e){
y = (e.pageY - Canvas.element.getBoundingClientRect().top) - (h/2);
});
Canvas.bindEvent('click', function(e){
createProjectile(50, (y + (h/2)) - 10);
});
// ------------------------------------------------------------------------------------------------
// FUNCTIONS
// ------------------------------------------------------------------------------------------------
var createProjectile = function(x, y){
projectiles.push({
x: x,
y: y
})
};
var update = function(){
for(var p = projectiles.length - 1; p >= 0; p--){
projectiles[p].x += 10;
if(projectiles[p].x > Canvas.element.width)projectiles.splice(p, 1);
}
};
var render = function() {
Canvas.context.fillStyle = color;
Canvas.context.fillRect(x, y, w, h);
console.log(projectiles.length);
for(var p = 0; p < projectiles.length; p++){
Canvas.context.fillStyle = 'red';
Canvas.context.fillRect(projectiles[p].x, projectiles[p].y, 20, 20);
}
};
// ------------------------------------------------------------------------------------------------
// Exposed Variables and Functions
// ------------------------------------------------------------------------------------------------
return{
update: update,
render: render
}
}();
'Bu, katı olmayan modda çoğunlukla pencere olan sözcük kapsamını gösterecektir. Katı modda 'bu' undefined' olacaktır. –
@RajaprabhuAravindasamy: "bu" kelimesinin * kapsamı değil. JS'deki kapsamı referans gösteremezsiniz (istisna: '' 'ifadeleri tarafından oluşturulan global kapsam ve kapsam, nesneler tarafından desteklendikleri için). –
@FelixKling Oh teşekkür ederim. '//' this 'value here işlev testi() {// bu değerin bu işlev dışında nasıl anlatabilirim? } 'Bunun sözcük kapsamı olduğunu söylerdim. Teknik terimlerim tükeniyor. :( –