私はオブジェクトとOOPの新しさを知りたいと思っていました。オブジェクト名を取得する方法と、オブジェクトのプロパティにアクセスする別の方法を知りたいと思っていました。異なるオブジェクトからプロパティにアクセスするにはどうすればよいですか?
さて、let'sこの例取る:この場合には、これは、を指すオブジェクトを、返され
function giveMeSomeName() {
console.log(this)
};
giveMeSomeName();
コンソールを "ウィンドウ"
var myObject = {
giveMeSomeName: function() {
console.log(this)
}
}
コンソール意志これが指し示すオブジェクト、この場合「オブジェクト」を返す
- この場合、参照するオブジェクトは "myObject"になります。私がこの情報を持っていないと仮定しましょう。私が持っているのはコンソールです。それはです。このはオブジェクトの方を指しています。オブジェクトの正確な名前を取得する方法はありますか(この場合、私は "myObject"を探しています)、はを指していますか?
Let'sは私の2番目の質問に移動し、1つのライン(this.age =「20」)によって、第2のコードスニペットを拡張:
var myObject = {
giveMeSomeName: function() {
console.log(this)
this.age = "20"
}
}
私がアクセスしたり、操作したい場合は、「年齢"別の文脈では、この場合、例えば" myObject.age + = 1 "とし、オブジェクト" myObject "のプロパティ" age "を21に変更します。
- 「年齢」にアクセスするための構文に関して別の方法がありますか? this.ageこれは "Window"を指し、 "myObject"(ここで "age"は未定義)を指していないので、これは機能しません。あなたはこの質問が最初のものと相関していることを理解しているかもしれません。
そしてコンクリートすべき:
私は、次のコードを持っています。関数「enemyMovement()」 (次のコードの一番下の行)で「敵」にアクセスするにはどうすればよいですか?
var game = new Phaser.Game(500, 200, Phaser.Auto, '',
{
preload: preload,
create: create,
update: update
}
);
function preload() {
game.load.image('tank', 'assets/tank.png')
game.load.image('tankEnemy', 'assets/tankEnemy.png')
}
function create() {
game.stage.backgroundColor = '#3598db'
game.physics.startSystem(Phaser.Physics.ARCADE);
game.world.enableBody = true;
this.cursor = game.input.keyboard.createCursorKeys();
this.tank = game.add.image(200, 75, 'tank')
this.enemy = game.add.image(0, 0, 'tankEnemy')
}
function update() {
if (this.cursor.left.isDown) {
this.tank.position.x -= 3;
}
else if (this.cursor.right.isDown) {
this.tank.position.x += 3;
}
else if (this.cursor.up.isDown) {
this.tank.position.y -= 3;
}
else if (this.cursor.down.isDown) {
this.tank.position.y += 3;
}
enemyMovement();
}
function enemyMovement() {
enemy.position.x += 3; //how can I access 'enemy' from above?
}
感謝:)
ちょうど "私のために自分で一つの可能な解決策を見つけた:
と変化する「更新」機能:あなたの特定のケースで
は「enemyMovement」機能を備えた「ゲーム」オブジェクトを拡張してみてください具体的な問題 "として、私は単に 'enemyMovement(this.enemy)'と呼んで、そのようにアクセスします。しかしこれにはより良い解決策がありますか?私の最初の2つの質問はまだあります:) – Faizy
私は 'game.enemy'を使って問題を解決できると信じています...? – GSazheniuk
JavaScriptのオブジェクトには、固有の「名前」がありません。オブジェクトを参照する可能性のある変数は、他のオブジェクトのプロパティと同様に名前を持ちます。同じ単一のオブジェクトは、任意の時点で任意の数の変数またはオブジェクトプロパティによって参照されることがあり、いつでも変更される可能性があります。 – Pointy