私は毎秒オブジェクトのメソッドを実行するJavaScriptプログラムを作成しています。このメソッドは、オブジェクトのプロパティ "x"を記録し、それに1を加えます。"this"は未定義です
オブジェクト(「プレイヤー」と呼ばれる)が構築されるクラスは「スネーク」と呼ばれ、プロパティ「x」は明確に0と定義されます。ただし、「everyTick」関数を実行すると、未定義'。
これは非常に奇妙です。これは、メソッドがplayer.xをログに記録するためです。しかし、 "player"の代わりに "this"を使用すると、定義されていません。誰もがなぜそれを修正する方法を説明することができますか?
ここにコードがあります。
var FPS = 1;
var toBeRun = {
func: function() {},
index: 0
};
function tickFunction(func) {
this.func = function() {
func();
}
}
function everyTick() {
toBeRun.func()
setTimeout(function() {everyTick();}, 1000/FPS);
}
function forever(func) {
toBeRun = new tickFunction(func);
}
function Snake() {
this.x = 0;
this.say = function() {
console.log(player.x);
console.log(this.x);
player.x++;
this.x++;
}
}
var player = new Snake();
function start() {
forever(player.say);
}
everyTick();
あなたはちょうどそのようにそれを見るとき、それは、本当に混乱しますので、ここではCodePenである: http://codepen.io/Plygon/pen/jqJZvq?editors=0011
私のクラス期間を
希望を呼び出すか、適用するだけで終わったので、私は今、あなたの答えを確認することはできませんが、ありがとう! – Polygon