Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  JS, function clone / extend märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 15.06.2012 18:32:57 JS, function clone / extend vasta tsitaadiga

Tervitused!

Olen siin viimased 2-3 päeva uurinud, kuidas ma saaksin luua olukorra, et mul on baasklass A ja selle peale teen klassi B, mis nö extend'iks klassi A?

Kõige olulisem situatsioon, kus siiani leitud lahendused pole toiminud, on järgmine:

var A = function(){
this.myVar = 'tere';
}
A.prototype.say = function(){
alert(this.myVar);
}

//Extendimist siia ei kirjuta, kuid kuidagi peab tegema "B extends A"
var B = function(){
this.myVar = 'head aega';
}

var myObj = new B();

myObj.say() // Vastuseks peab tulema 'head aega'


Probleemiks on osutunud just see, et parent klassis olev 'say' meetod pöördub otse tema enda myVar'i poole, kuigi ta peaks pöörduma child'i myVar'i poole.

Ei tahaks kasutada mingeid kohmakaid framework'e ega muud taolist, vaid teha asja võimalikult puhtalt.

Ehk keegi on sarnase asjaga kokku puutunud? Väga sooviks veidi juhendamist.

_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt


viimati muutis jnt 16.06.2012 11:30:41, muudetud 1 kord
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 15.06.2012 23:03:59 vasta tsitaadiga

Viimane rida su koodis myObj.say() ei peaks olema? Sellisel juhul B.prototype = new A();.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 16.06.2012 11:30:31 vasta tsitaadiga

Timukas0, Õige, peaks olema myObj.say().

läbi prototüübi üle kirjutamise ütleb ta 'tere'. Selles probleem ongi.

_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 16.06.2012 13:55:55 vasta tsitaadiga

Mul tuleb kenasti 'head aega'. Panen igaks juhuks terve koodi:
javascript:
  1. var A = function() {
  2.     this.myVar = 'tere';
  3. };
  4. A.prototype.say = function(){
  5.     alert(this.myVar);
  6. };
  7.  
  8. var B = function() {
  9.     this.myVar = 'head aega';
  10. };
  11. B.prototype = new A();
  12.  
  13. var myObj = new B();
  14. myObj.say();
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 16.06.2012 14:09:22 vasta tsitaadiga

Hmm.. töötab jah...

Mida ma enne küll teistmoodi tegin... Suva, las olla. Tänud kaasa mõtlemise eest ja tundub, et tegelikult probleem oli arvuti ja tooli vahel.

_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 16.06.2012 14:17:39 vasta tsitaadiga

jnt, "B.prototype = new A();" rida oli puudu, muud erinevust pole.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 16.06.2012 14:32:32 vasta tsitaadiga

mikk36, ei, ma katsetasin prototüübi üle kirjutamist, aga ilmselt oli mul hoopis mujal mingi totaalne jama, mis tõttu arvasin hoopis, et prototüübi üle kirbamine ei toimi nii, nagu vaja. Viga oli mul hoopis kuskil ülejäänud koodis, mida vahepeal olen 100x ümber kirjutanud, seega ei oska hetkel kahjuks ka meenutada, milles asi võis olla.
_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
lehm2
Kreisi kasutaja


liitunud: 19.09.2004




sõnum 17.06.2012 21:31:43 vasta tsitaadiga

Jälgin seda teemat ja pakun ka ühe variandi ES 5 stiilis tehtud pärimisest. Võrreldes teiste programmeerimis keeltega, siis pärimise mõistmine ja kasutamine on suhteliselt keeruline ning alguses harjumatu.

ES5
javascript:
  1.  
  2. var A = Object.create({
  3.     name: null,
  4.     greet: function() {
  5.        console.log('Hello ', this.name);
  6.     }
  7. });
  8.  
  9. var B = Object.create(A);
  10. B.age = 34;
  11. B.name = 'Mihkel';
  12. B.greet();
  13.    
  14.    
  15. var C = Object.create(B);
  16. console.log(C);
  17. C.say = function() {
  18.   alert('WTF alert again ?');     
  19. }
  20. C.greet();
  21. C.say();
  22.  


Classical inheritance
javascript:
  1.  
  2. var AA = function() {};
  3. AA.prototype = {
  4.     name: null,
  5.     greet: function() {
  6.         console.log('Hello ', this.name);
  7.     }
  8. };
  9.  
  10. var BB = function() {};
  11. BB.prototype = new AA();
  12.  
  13.  
  14. var CC = function(name) {
  15.     this.name = name;
  16. };
  17. CC.prototype = new BB();
  18.  
  19. CC.prototype.say = function() {
  20.    this.greet();
  21.    alert('This is classical inheritance');   
  22. }
  23.  
  24.  
  25. var jan = new BB();
  26. jan.name = 'Jaanus';
  27. jan.greet();
  28.  
  29. var jean = new CC('Jean');
  30. jean.say();
  31.  

_________________
Piilu siia, progreja!
Vajad abi Node.JS-ga ?
Võta ühendust !
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  JS, function clone / extend
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.