[英]Using 'This' within an IIFE constructor
我正在開發一個小型的復古式側滾動太空射擊游戲(或者無論如何就是這樣的理論),最近我開始使用IIFE來管理我自己的“類”。
但是,我看到的大多數示例在聲明變量(例如var x = 0
時都傾向於使用var
。 我想知道,是否可以使用this.x = 0
,如果這樣,是否有好處或缺點?
我已嘗試使用Google搜索,但在該主題上找不到太多信息,這使我認為這不是問題。
我的課程如下:
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
}
}();
有什么好處或缺點嗎?
缺點是在嚴格模式下 ,您會收到運行時錯誤(因為this
是undefined
)。
在非嚴格模式下 , this
將引用window
,因此this.x = ...
創建一個全局變量(這是我想首先使用IIFE避免的變量)。
沒有好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.