Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2010, 18:21
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Про наследование
Пытаюсь понять как работает ООП в js. Особенно интересно наследование.
Вот предположим хотим сделать различные классы для 2d графики на canvas.

Начнём с точки.
function point(x,y){
this.x=x;
this.y=y;
}


А вот как дальше например линию реализовать на базе точки, а потом на базе линии треугольник сделать, не пойму.
Может ли нам здесь пригодиться метод superclass?

Cтатьи читал про ООП, но недопонимаю.
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2010, 18:28
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

http://javascript.ru/tutorial/object/inheritance
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2010, 18:54
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от mycoding
А вот как дальше например линию реализовать на базе точки, а потом на базе линии треугольник сделать, не пойму.
немудрено что вы не понимаете статьи, если вы видите такое наследование обычно делается от общего к частному.
то, есть, например:
треугольник наследует свойства(является частным случаем) многоугольника.

но, треугольник состоит из отрезков

так вот, вы не отличаете наследует свойства(является частным случаем) от состоит из
Ответить с цитированием
  #4 (permalink)  
Старый 25.05.2010, 19:23
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Ясно, но вот как все таки реализовать хотя бы для линии?

Вообще столько статей про наследование прочитал, но так и не понял superclass для чего нужен?
ЕГо можно применить в ООП?

Последний раз редактировалось mycoding, 25.05.2010 в 19:28.
Ответить с цитированием
  #5 (permalink)  
Старый 25.05.2010, 19:50
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от mycoding
Вообще столько статей про наследование прочитал, но так и не понял superclass для чего нужен?
ЕГо можно применить в ООП?
А что, есть другие парадигмы с классами?

Суперкласс - класс-родитель, от которого наследуется текущий.

По реализации линий: нужно определиться с форматом задания линий. Например, задавать линию двумя точками (т.е. как состоящую из 2 экземпляров класса Point).
Ответить с цитированием
  #6 (permalink)  
Старый 25.05.2010, 20:00
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Т.е. как то так

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;
}


Что, то не то. Или я наследование не понимаю
Ответить с цитированием
  #7 (permalink)  
Старый 25.05.2010, 20:08
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Здесь нет наследования. И быть не может.
Читайте пост Гвоздя.
Ответить с цитированием
  #8 (permalink)  
Старый 25.05.2010, 20:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

mycoding,
в сети куча статей разной степени углублённости. Читайте. Ничего нового вам тут не скажут.
Ответить с цитированием
  #9 (permalink)  
Старый 26.05.2010, 20:44
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Вот вроде бы, что то похожее на наследование получилось
Делаем кролика, лису и волка, они говорят имя своего класса.
А потом бегут кто быстрее.

<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>

Последний раз редактировалось mycoding, 26.05.2010 в 20:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что можно и нужно прочитать про валидацию? Amateur Общие вопросы Javascript 5 09.03.2010 11:41
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50
Наследование Fliand Events/DOM/Window 0 12.08.2009 20:48
Наследование в CSS SunnyDay (X)HTML/CSS 14 06.10.2008 20:06
наследование установок динамически создаваемыми элементами majestic jQuery 1 15.09.2008 13:21