У меня есть HTML-документ, который выглядит так:
<!DOCTYPE html>
<html>
<head>
<link rel = "stylesheet"
type = "text/css"
href = "landscape.css" />
</head>
<body>
<h1 id = "heading">My Landscape</h1>
<canvas id = "landscape" width = "800" height = "600">
landscape
</canvas>
<script type = "text/javascript"
src = "landscape.js">
</script>
</body>
</html>
и вот landscape.js:
var canvas = document.getElementById('landscape');
var context = canvas.getContext('2d');
context.fillStyle = "#ff0000";
context.fillRect(20, 20, 150, 100);
var mySky = new sky(40, 40);
mySky.render(context);
function sky(x, y){
this.x = x;
this.y = y;
function render(theContext){
theContext.fillStyle = "#00ff00";
theContext.fillRect(x, y, 150, 100);
}
}
Теперь первая часть - "context.fillStyle =" и "context.fillRect()" - работают нормально. Он отображается как красный прямоугольник в моем браузере (с использованием Firefox на Mac кстати).
Но когда я пытаюсь создать объект неба, а затем передаю контекст для его отображения, ничего не происходит. Я не могу понять, почему он не выполнит функцию рендеринга на объекте sky.
Я не понимаю, как работают объекты JS?
Вот (очень простой) CSS, в случае, если кто-то хочет попробовать запустить все это.
/* landscape.css */
#landscape{
border: 2px solid black;
}
Это потому, что ваша функция рендеринга является private
, поскольку она доступна только изнутри вашей функции sky()
.
Чтобы он работал, вам необходимо предоставить внешнюю доступность (добавив к this
свойство свойство)
Пытаться
this.render = function(thecontext) {
}
this.changeName=changeName;
Который назначает «приватную» функцию changeName общедоступному свойству.