所以,我有一個啓動畫面的構造函數。我正在使用畫布圖形(下面的ctx是對canvas元素的2D上下文的引用),但是當我嘗試獲取丟失上下文的本地副本時似乎是這樣。是否有人有一個想法,爲什麼它是不確定的如果它確實(見下文)JavaScript的構造函數似乎正在丟失數據
function SplashScreen(_ctx)
{
this.loadScene = function()
{
this.img = new Image();
this.img.onload = this.render;
this.img.src = 'art/SplashScreen.png';
};
this.unloadScene = function()
{
delete this.img;
this.img = null;
CollectGarbage();
};
this.render = function()
{
alert(this.ctx);//<--------------undefined
alert(this.img);//<--------------undefined
this.ctx.drawImage(this.img,0,0);
};
alert(_ctx); //<--------------properly defined
this.ctx = _ctx;
alert(this.ctx);//<--------------properly defined
return this;
}
這裏是我打電話閃屏(注:以下是main.js,和上面的是在啓動畫面。 JS):
var ctx;
var scene_Splash;
var currentScene;
function main()
{
ctx = document.getElementById('canvas').getContext('2d');
alert(ctx); //<-------fine and defined
scene_Splash = new SplashScreen(ctx);
changeScene(scene_Splash, null, null);
}
function changeScene(_newScene, _transition, _time)
{
currentScene = _newScene;
currentScene.loadScene();
}
這一擴大更進一步,這裏是引用這些腳本index.html文件的一部分:
<html>
<head>
<script language="JavaScript" type="text/javascript" src="splashscreen.js"></script>
<script language="JavaScript" type="text/javascript" src="main.js"></script>
</head>
<body onload="main()">
<canvas id="canvas" width="640" height="960"></canvas>
</body>
</html>
你似乎對JS的'this'工作做了一些不正確的假設。首先要知道的是,'this'與變量範圍無關,與繼承無關。它完全與*如何調用特定函數有關。 – 2012-06-08 19:46:15
您應該查看構造函數的原型屬性,該構造函數是定義您的方法的地方。現在,您還可以使用返回啞對象字面值的常規函數。 – Esailija
......換句話說,你應該顯示*你是如何調用'SplashScreen'以及本地定義的方法,因爲這樣做會有所不同。 – 2012-06-08 19:52:21