Про наследование
Пытаюсь понять как работает ООП в js. Особенно интересно наследование.
Вот предположим хотим сделать различные классы для 2d графики на canvas. Начнём с точки.
function point(x,y){
this.x=x;
this.y=y;
}
А вот как дальше например линию реализовать на базе точки, а потом на базе линии треугольник сделать, не пойму. Может ли нам здесь пригодиться метод superclass? Cтатьи читал про ООП, но недопонимаю. |
|
Цитата:
то, есть, например: треугольник наследует свойства(является частным случаем) многоугольника. но, треугольник состоит из отрезков так вот, вы не отличаете наследует свойства(является частным случаем) от состоит из |
Ясно, но вот как все таки реализовать хотя бы для линии?
Вообще столько статей про наследование прочитал, но так и не понял superclass для чего нужен? ЕГо можно применить в ООП? |
Цитата:
Суперкласс - класс-родитель, от которого наследуется текущий. По реализации линий: нужно определиться с форматом задания линий. Например, задавать линию двумя точками (т.е. как состоящую из 2 экземпляров класса Point). |
Т.е. как то так
function point(x,y){
this.x=x;
this.y=y;
this.draw=function(){....}
}
function line(p1,p2){
this.p1=p1;
this.p2=p2;
this.superclass=point;
}
Что, то не то. Или я наследование не понимаю |
Здесь нет наследования. И быть не может.
Читайте пост Гвоздя. |
mycoding,
в сети куча статей разной степени углублённости. Читайте. Ничего нового вам тут не скажут. |
Вот вроде бы, что то похожее на наследование получилось
Делаем кролика, лису и волка, они говорят имя своего класса. А потом бегут кто быстрее.
<script>
function Animal() {
this.x;
this.y;
this.out=false;
}
Animal.prototype = {
move:function(){
var width=$('canvas').width;
var height=$('canvas').height;
this.x+=this.distance;
if(this.x>width) {this.out=true;}
},
echo : function(){alert(this.name);},
setCoords : function(x,y){
this.x=x;
this.y=y;
}
}
function Rabbit() {
this.name = 'Кролик';
this.distance = 3;
}
function Wolf() {
this.name = 'Волк';
this.distance = 5;
}
function Fox() {
this.name = 'Лиса';
this.distance = 4;
}
var animal = new Animal();
Rabbit.prototype = Wolf.prototype = Fox.prototype = animal;
var rabbit1 = new Rabbit();
var wolf1 = new Fox();
var fox1 = new Wolf();
rabbit1.echo();
wolf1.echo();
fox1.echo();
rabbit1.setCoords(2,30);
wolf1.setCoords(2,100);
fox1.setCoords(2,150);
function $(id){return document.getElementById(id);}
window.onload = function(){
canvas=$('canvas').getContext('2d');
interval=setInterval(function(){draw(canvas);},100);
}
function draw(ctx){
ctx.clearRect(0,0,400,200);
rabbit1.move();
fox1.move();
wolf1.move();
ctx.beginPath();
ctx.arc(rabbit1.x,rabbit1.y,2,0,Math.PI*2,true); // Внешний круг
ctx.stroke();
ctx.beginPath();
ctx.arc(wolf1.x,wolf1.y,2,0,Math.PI*2,true); // Внешний круг
ctx.stroke();
ctx.beginPath();
ctx.arc(fox1.x,fox1.y,2,0,Math.PI*2,true); // Внешний круг
ctx.stroke();
if(rabbit1.out && rabbit1.out && rabbit1.out) {clearInterval(interval);}
}
</script>
<canvas id='canvas' width=400 height=200 style="border:1px solid #888888"></canvas>
|
| Часовой пояс GMT +3, время: 20:08. |