2016-10-18 4 views
-1

myGameAreaオブジェクトを見てください。キャンバスはのプロパティです。しかし、start()メソッドを呼び出すとどうなりますか?そのプロパティは現在のプロパティ、幅と高さにあるように見えます。キャンバスのプロパティは失われますか?オブジェクトですか?誰かがそれを説明できますか?おかげjavascript plain object:このプロパティはどうなりますか?

var myGameArea = { 
    canvas : document.createElement("canvas"), 
    start : function() { 
     this.canvas.width = 480; 
     this.canvas.height = 270; 
     this.context = this.canvas.getContext("2d"); 
     document.body.insertBefore(this.canvas, document.body.childNodes[0]); 
    } 
} 
+0

(OT) "何が起こります?" - "あなたの拠点はすべて私たちのものです!" –

+0

'canvas'は(" DOM要素 "型の)オブジェクトです。オブジェクトは独自のプロパティを持つことができます。基本的なOOP理論です。 –

答えて

1

オブジェクトがmyGameAreacanvasであるが、それのプロパティです。

キャンバスプロパティは失われません。あなたが正しく行った通りthis.canvasstart()の中からアクセス可能です。 canvasプロパティにも、それ自体のプロパティーがあります。widthheightです。

あなたが確認するために、この例ではconsole.log出力を表示することができます。

https://jsfiddle.net/dfq4Lnho/

startを使用せずにこれを行うために:

https://jsfiddle.net/dfq4Lnho/1/ 

var myGameArea = function() { 
    this.canvas = document.createElement("canvas"); 
    this.canvas.width = 480; 
    this.canvas.height = 270; 
    this.context = this.canvas.getContext("2d"); 
    document.body.insertBefore(this.canvas, document.body.childNodes[0]); 
} 

myGameArea.prototype.somethingElse = function() { 
    console.log('this is a method of myGameArea'); 
    console.log(this.canvas); // access this.canvas here too! 
} 

var tmp = new myGameArea(); 
console.log(tmp.canvas); 
tmp.somethingElse(); 
+1

HTMLCanvasElementはデフォルトで 'width'と' height'プロパティを持っているので、* now *を削除します。 – Kaiido

+0

interesing。しかしここでは事...メソッドstart()なしで同じことをどうやってやっていますか?...私は普通のオブジェクトのプロパティにプロパティを追加することを意味しますか? –

+0

更新されたレスポンスを参照してください。 –

関連する問題