Temat: JavaScript - Dziedziczenie

Witam, mam takie pytanie, czy jest możliwe dziedziczenie w taki o to sposób

function Class1()
{

this.publicMethod = function()
{
alert('publicMethod');
}

var privateMethod = function()
{
alert('privateMethod');
}

}

function Class2()
{
// chce aby tutaj była widoczna metoda privateMethod
this.customMethod = function()
{
privateMethod();
}
}

wiem że mogę zrobić ją metodą publiczną i oznaczyć np _privateMethod ale wole aby ona nie była widoczna.

var class2 = new Class2();
class2.privateMethod(); // <--- Chce tego uniknąć

metoda ma być tylko widoczna w wewnątrz Class1 oraz Class2.

konto usunięte

Temat: JavaScript - Dziedziczenie

Piotr L.:
a tak: http://stackoverflow.com/questions/1813113/how-to-inhe... ?

Jest to jakieś rozwiązanie, lecz nie podoba mi się za bardzo taki zapis, w tej chwili robię to w taki sposób

function Class2()
{
Class1.call(this);
}

lecz taką metodą nie dziedziczy mi tego co zdeklaruje poprzez var w Class1.

a czy ta zmienna secret nie jest dostępna wszędzie? bo może to kolidować z innymi Klasami, a mało ich nie będę miał.Mirosław Bogacz edytował(a) ten post dnia 27.09.11 o godzinie 19:28

konto usunięte

Temat: JavaScript - Dziedziczenie

Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().Sebastian Zaborowski edytował(a) ten post dnia 27.09.11 o godzinie 20:02

konto usunięte

Temat: JavaScript - Dziedziczenie

A nie możesz skorzystać z modułu, jak sugeruje Piotrek, po czym wykorzystać go jako prototyp do kolejnej funkcji?

Edit:

Właśnie się zorientowałem, że pod tym linkiem było jednak coś innego a w pierwszej odpowiedzi zmienna secret jest zadeklarowana jako globalna ( :D ).rafał krupiński edytował(a) ten post dnia 27.09.11 o godzinie 20:43

konto usunięte

Temat: JavaScript - Dziedziczenie

Polecam lekturke o subclassowaniu w JS :)
http://www.golimojo.com/etc/js-subclass.html

konto usunięte

Temat: JavaScript - Dziedziczenie

Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().


Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

Temat: JavaScript - Dziedziczenie

Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().

Jest to sposób którego chciałem uniknąć bo z doświadczenia wiem że SubClass'a nie będzie miała dostępu do metod prywatnych BaseClass, chyba że wszystkie będą publiczne co opisywałem w pierwszym poście. Chyba że się mylę :)

a jQuery w rękach nie doświadczonego programisty to zło i swoją drogą staram się go unikać gdzie nie przedłuży mi to pracy.
rafał krupiński:
A nie możesz skorzystać z modułu, jak sugeruje Piotrek, po czym wykorzystać go jako prototyp do kolejnej funkcji?

a co jeżeli będę miał np 15 plików js z różnymi Klasami? wszystkie będą widziały zmienną
secret co może za owocować niezłym bałaganem.

ps. Trochę ogarnę moje 2 klasy i pokaże co chce uzyskać.

konto usunięte

Temat: JavaScript - Dziedziczenie

rafał krupiński:
Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

Nie mysla.... ludzie sa PRZEKONANI!
Pisze teraz widget w czystym JS i potrzebowalem szybko wygooglowac pare rzeczy. Pierwsze odpowiedzi na pytania dostawalem w formie "jquery". Chore...
W oferach pracy pisza "znajomosc jquery (javascript)" zawsze mi sie wydawalo ze powinno byc w innej kolejnosci, ale coz.. widac wystrczy tylko znajomosc gadzetow :)

Temat: JavaScript - Dziedziczenie

HASŁA DO PLIKÓW TO: belmor

To jest klasa DisplayObject
http://www.copypastecode.com/79395/

To jest klasa Rectagle
http://www.copypastecode.com/79399/ - wyświetla kwadrat na ekranie wszystkie właściwości metody odpowiadające za wielkość, pozycje itp dziedziczy po DisplayObject, moje założenie jest takie że będzie jeszcze np. Bitmap, Circle itp i nie chce później modyfikować wszystkich klas bo zmieniłem metodę która odpowiada za np pozycję na ekranie.

konto usunięte

Temat: JavaScript - Dziedziczenie

Mirosław Bogacz:
Witam, mam takie pytanie, czy jest możliwe dziedziczenie w taki o to sposób

function Class1()
{

this.publicMethod = function()
{
alert('publicMethod');
}

var privateMethod = function()
{
alert('privateMethod');
}

}

function Class2()
{
// chce aby tutaj była widoczna metoda privateMethod
this.customMethod = function()
{
privateMethod();
}
}

wiem że mogę zrobić ją metodą publiczną i oznaczyć np _privateMethod ale wole aby ona nie była widoczna.

var class2 = new Class2();
class2.privateMethod(); // <--- Chce tego uniknąć
>
metoda ma być tylko widoczna w wewnątrz Class1 oraz Class2.
Nie wiem czy dobrze rozumiem, ale próbujesz z klasy pochodnej mieć dostęp do prywatnej metody/właściwości klasy bazowej? To jest złamanie enkapsulacji - podstawowego założenia paradygmatu OOP.

konto usunięte

Temat: JavaScript - Dziedziczenie

rafał krupiński:
Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().


Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

a nie ? :D to skąd te "j" w "jQuery" ?? :P

Temat: JavaScript - Dziedziczenie

Kamil B.:
Mirosław Bogacz:
Witam, mam takie pytanie, czy jest możliwe dziedziczenie w taki o to sposób

function Class1()
{

this.publicMethod = function()
{
alert('publicMethod');
}

var privateMethod = function()
{
alert('privateMethod');
}

}

function Class2()
{
// chce aby tutaj była widoczna metoda privateMethod
this.customMethod = function()
{
privateMethod();
}
}

wiem że mogę zrobić ją metodą publiczną i oznaczyć np _privateMethod ale wole aby ona nie była widoczna.

var class2 = new Class2();
class2.privateMethod(); // <--- Chce tego uniknąć
> >
metoda ma być tylko widoczna w wewnątrz Class1 oraz Class2.
Nie wiem czy dobrze rozumiem, ale próbujesz z klasy pochodnej mieć dostęp do prywatnej metody/właściwości klasy bazowej? To jest złamanie enkapsulacji - podstawowego założenia paradygmatu OOP.

Tak? :)

konto usunięte

Temat: JavaScript - Dziedziczenie

Andrzej Winnicki:
rafał krupiński:
Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

Nie mysla.... ludzie sa PRZEKONANI!

Jest jeszcze MooTools :D
Pisze teraz widget w czystym JS i potrzebowalem szybko wygooglowac pare rzeczy. Pierwsze odpowiedzi na pytania dostawalem w formie "jquery". Chore...
W oferach pracy pisza "znajomosc jquery (javascript)" zawsze mi sie wydawalo ze powinno byc w innej kolejnosci, ale coz.. widac wystrczy tylko znajomosc gadzetow :)

Znak czasu - nie ma się co dziwić... Firmy wymagają jQ albo MT, to ludki się go uczą :DPiotr L. edytował(a) ten post dnia 27.09.11 o godzinie 20:31

konto usunięte

Temat: JavaScript - Dziedziczenie

od jQuery :D

i tak w kółko
Piotr L.:
rafał krupiński:
Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().


Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

a nie ? :D to skąd te "j" w "jQuery" ?? :P

Temat: JavaScript - Dziedziczenie

Piotr L.:
rafał krupiński:
Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().


Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

a nie ? :D to skąd te "j" w "jQuery" ?? :P

JavaScript to nie jQuery
jQuery to JavaScript

konto usunięte

Temat: JavaScript - Dziedziczenie

rafał krupiński:
od jQuery :D

i tak w kółko

kto by się tam dzisiaj chciał uczyć tego całego JavaScriptJitsu :D

konto usunięte

Temat: JavaScript - Dziedziczenie

Mirosław Bogacz:
Piotr L.:
rafał krupiński:
Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().


Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

a nie ? :D to skąd te "j" w "jQuery" ?? :P

JavaScript to nie jQuery
jQuery to JavaScript

ORLY ? Dzienx, nie wiedziałem :D

Temat: JavaScript - Dziedziczenie

Piotr L.:
Mirosław Bogacz:
Piotr L.:
rafał krupiński:
Sebastian Zaborowski:
Użyj jQuery i jego extend()
http://api.jquery.com/jQuery.extend/

Poza tym nie możesz odwoływać się do lokalnej metody/atrybutu z zewnątrz. Musisz użyć czegoś w postaci pośrednika jakim będzie obiekt Class1, który będzie miał privateMethod().


Co Wy z tym jQuery :) Potem ludzie myślą, że javascript to jQuery :D

a nie ? :D to skąd te "j" w "jQuery" ?? :P

JavaScript to nie jQuery
jQuery to JavaScript

ORLY ? Dzienx, nie wiedziałem :D
:p ostatnio dostałem jakąś propozycje na JavaScript ninija :)

konto usunięte

Temat: JavaScript - Dziedziczenie

Mirosław Bogacz:
Piotr L.:

ORLY ? Dzienx, nie wiedziałem :D
:p ostatnio dostałem jakąś propozycje na JavaScript ninija :)

Mi też ktoś ostatnio przysyłał ofertę w stylu "Front-end rockstar" ale odpisałem, że słabo gram na gitarze :D

BTW: tnij cytatyPiotr L. edytował(a) ten post dnia 27.09.11 o godzinie 20:39

Następna dyskusja:

obiektowosc w js - pytanie ...




Wyślij zaproszenie do