[JavaScript][Idea] Dziedziczenie w JS? (“Extends”)

2 02 2009

Notatka: Można też inaczej: http://kurs.browsehappy.pl/JavaScript/Dziedziczenie :)

Ostatnio mam takie ciekawy pomysły :)

Co by było, jakby tak zrobić dziedziczenie w JS?

Myślałem… Myślałem…
…i wymyślałem. :)
W głowie ułożyłem sobie ot mniej więcej tak:

function object1() {
 this.test1 = "asdf";
}

function object2() {
 this = new object1();
 this.test2 = "asdf2.0";
}

var test = new object2();
console.info(test);

No niby powinno działać, ale nie działa – invalid assignment left-hand side.
No i czemu tu się dziwić, rzeczywiście – this się nie da przypisać. Czyli na pewno nie będziemy korzystać z this, tylko zmienimy sobie na…. th?

Więc dalej zacząłem pisać i wyszło mi coś takiego:

function object1() {
	//Pierwszy obiekt - dziedziczymy po Object..
	//..dlatego można również:
	//th = new Object();
	th = {};
	//jednak tak jest krócej ;]

	//kilka zmiennych testowych
	th.lastObjectName = 'object1';
	th.object1 = 'yes';
	return th;
}

function object2() {
	// Tym razem dziedziczymy po object1.
	th = new object1();

	// i znowu testy.
	th.lastObjectName = 'object2';
	th.object2 = 'yes';
	return th;
}

function object3() {
	// Dziedziczymy po object2 (zaraz koniec czytelniku :p)
	th = new object2();

	th.lastObjectName = 'object3';
	th.object3 = 'yes';
	return th;
}

var t = new object3();

alert("lastObjectName: "+t.lastObjectName+
	"\ntypeOf: "+typeof(t)+
	"\nobject1: "+t.object1+
	"\nobject2: "+t.object2+
	"\nobject3: "+t.object3);
//lub, jeżeli masz FireBug'a
//console.info(t);

I, o dziwo, działa :)
Jestem ciekawy co wy o tym myślicie?
Wypowiedzcie się :)


Działania

Informacja

6 odpowiedzi

3 02 2009
3 02 2009
infdevblog

Rzeczywiście, nie widziałem tego.
Ciekawe.. Jednak nie wymysliłem tego pierwszy :)

8 03 2009
daniel1302

Nie jest to dziedziczenie można to nazwać pseudo i to nie bardzo. Jest to po prostu nowa instancja klasy w innej klasie

11 09 2009
rd

Sensem dziedziczenia jest przede wszystkim to, aby z instancji klasy B, ktora jest pochodna klasy A, mozna było wywolac metody klasy A i w razie potrzeby zastepowac je nowymi. Dlatego podany tutaj sposob rozwiazuje problem dziedziczenia.

11 09 2009
rd

Sposob podany na stronie http://kurs.browsehappy.pl/JavaScript/Dziedziczenie jest bledny. Wezmy klase A ze zmienna s. Dziedziczymy po niej klase B. Tworzymy dwie zmienne klasy B: b1 i b2. do b1.s przypisujemy wartosc. Kiedy wyswietlimy b2.s okaze sie, ze ma ona wartosc, ktora wlasnie przypisalismy do b1.

11 09 2009
rd

Wysililem sie nad tym komentarzem, poniewaz autor podal dobry sposob na dziedziczenie, a poprzednie komentarze nie dosc, ze nie maja racji, to sa uszczypliwe. Na prawie kazdym portalu programistycznym spotykam sie z czyms takim i wkur… mnie to, ze ludzie mojego fachu to takie male, uszczypliwe menty.

Dodaj komentarz