私は小さなレトロスタイルのサイドスクロールスペースシューティングゲーム(またはそれはとにかく理論です)に取り組んでいます。最近、私の別の 'クラス'。IIFEのコンストラクタ内で 'This'を使用する
しかし、私が見た例のほとんどは、変数を宣言するときにvar
を使用する傾向があります(例:var x = 0
)。私は考えていますが、this.x = 0
を使用することは可能ですか?その場合、何か利点や欠点はありますか?
私はグーグルで試してみましたが、その件についてはあまり見つからないため、問題ではないと思うようになりました。
私のクラスは以下の通りです。
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'はレキシカルスコープを指します。ほとんどは非厳密モードのウィンドウです。 strictモードでは 'this'は' undefined'になります。 –
@RajaprabhuAravindasamy: 'this'は* lexical scope *を指しません。 JS内でスコープを参照することはできません(例外:グローバルスコープと 'with'ステートメントによって作成されたスコープはオブジェクトによってサポートされているため)。 –
@FelixKlingありがとうございます。 '// 'this' value here function test(){//この関数の外でこの値をどのように伝えることができますか? } '私はそれがレキシカルスコープであることを伝えていました。私は専門用語を使い果たしています。 :( –