Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
jnt
HV Guru

liitunud: 10.05.2005
|
15.06.2012 18:32:57
JS, function clone / extend |
|
|
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.
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 |
|
 |
Timukas0
HV kasutaja

liitunud: 20.03.2007
|
15.06.2012 23:03:59
|
|
|
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 |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
Timukas0
HV kasutaja

liitunud: 20.03.2007
|
16.06.2012 13:55:55
|
|
|
Mul tuleb kenasti 'head aega'. Panen igaks juhuks terve koodi:
javascript:
|
var A = function() { this.myVar = 'tere'; }; A.prototype.say = function(){ alert(this.myVar); }; var B = function() { this.myVar = 'head aega'; }; B.prototype = new A(); var myObj = new B(); myObj.say();
|
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
16.06.2012 14:17:39
|
|
|
jnt, "B.prototype = new A();" rida oli puudu, muud erinevust pole.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
16.06.2012 14:32:32
|
|
|
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.
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 |
|
 |
lehm2
Kreisi kasutaja

liitunud: 19.09.2004
|
17.06.2012 21:31:43
|
|
|
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:
|
var A = Object.create({ name: null, greet: function() { console.log('Hello ', this.name); } }); var B = Object.create(A); B.age = 34; B.name = 'Mihkel'; B.greet(); var C = Object.create(B); console.log(C); C.say = function() { alert('WTF alert again ?'); } C.greet(); C.say();
|
Classical inheritance
javascript:
|
var AA = function() {}; AA.prototype = { name: null, greet: function() { console.log('Hello ', this.name); } }; var BB = function() {}; BB.prototype = new AA(); var CC = function(name) { this.name = name; }; CC.prototype = new BB(); CC.prototype.say = function() { this.greet(); alert('This is classical inheritance'); } var jan = new BB(); jan.name = 'Jaanus'; jan.greet(); var jean = new CC('Jean'); jean.say();
|
_________________ Piilu siia, progreja!
Vajad abi Node.JS-ga ?
Võta ühendust ! |
|
Kommentaarid: 15 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
13 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
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
|
|