スクリプトの修正にご協力ください。
問題は、関数scoreChange()を呼び出すことができないことです。
私のシングルトンメソッドはscoreChange()命令を返します。しかし、それは助けにはなりません
コンソールはここにメッセージを表示しますエラー:
Uncaught ReferenceError:scoreChangeが定義されていません
js:
var Player = (function (){
var instance;
function init() {
return {
x: 500,
y: 500,
health: 100,
bullets: 50,
speed: 10,
score: 0,
render: function(x, y){
$('#player').css({
'left': (x || this.x) + 'px',
'top': (y || this.y) + 'px'
});
return;
},
scoreChange: function(score){
$('.score').text(score);
},
init: function(){
if($('#player').length == 0){
$('<div class="ship_player" id="player" />').appendTo('#wrap');
}
this.render(500, 500);
return;
}
};
};
return {
getInstance: function (){
if ( !instance ){
instance = init();
}
return instance;
},
scoreChange: scoreChange
};
})();
var player = Player.getInstance();
player.init();
player.scoreChange(100);
Player関数がでオブジェクトを返していたことがわかりますgetInstance
が、Player
それ自体は関数です。したがって、値を付加しない限り、あなたがしようとしているようにthis.varname
アクセスPlayer.varname
することはできませんPlayer.getInstance()
これがどのように間違って表現されているかを示すものPlayer().getInstance()
として、Player
関数が呼び出され、getInstance
フィールドの1つとしてオブジェクトへのハンドルが返されるため、より意味的に意味があることに注意してください。
私はこれをそのように書き直します。
var Player = function($player) {
if (Player.prototype._singletonInstance)
return Player.prototype._singletonInstance;
Player.prototype._singletonInstance = this;
this.$player = $player;
this.x = 500; this.y = 500;
this.stats = {
speed: 10, score: 0,
health: 100, bullets: 50,
};
this.render = function render(x,y) {
this.$player.css({
'left': (this.x = x || this.x) + 'px',
'top': (this.y = y || this.y) + 'px'
});
return this;
};
this.changeScore = function changeScore(score) {
$('.score').text(this.stats.score = score);
};
};
var player = new Player($('#player'));
var _player = new Player();
if (player === _player)
console.log('Successful singleton');
player.changeScore(100); // success
また、イベントを使用して$('.score')
要素をプレーヤーのスコア値にバインドすることをお勧めします。したがって、changeScore
メソッドでは、などのイベントをscoreChanged
発行し、スコアを表す各dom要素がそのイベントをリッスンして適切に調整できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加