Tjena! JScript is not an OOP language ) Jag tycker att den blir false för mig när jag prövar. Hur ser du att den inte blir det? Yes I know its not a pure OOP language, but it's object-based. :) Tjena! Tjena igen. På grund av att bCanSave är en instansvariabel och inte en klassvariabel. Okej, hmm jo jag läste lite om det där, och den reserverar ett värde för varjeProblem med prototype och ärvd klass/metod
Jobbar lite på ett system med hjälp av OOP i javascript.
Problemet jag har är att ett värde i den högst förekommande
classen av alla objekt, denna kan inte ändras i en ärvd method
som subclassen använder sig av.
Hmm det vart rörigt, rätt nytt för mig med oop i javascript så
alla termer kanske inte blir rätt.
Så här fungerar det ungefär.
function SuperClass(){
this.bCanSave = true;
this.showSaveMenu = showSaveMenu ;
}
function SubClass(obj){
this.oElm = document.getElementById(obj);
}
SubClass.prototype = new SuperClass;
function showSaveMenu(){
this.bCanSave = false;
}
// Denna körs när alla element är färdigladdade.
function intiSystem(){
mysuperclass = new SuperClass();
mysubclass = new SubClass("testdiv");
}
när jag sedan använder mig av
go
Så blir inte this.bCanSave false...även fast den är prototype
av superclassen.
Någon som har en lösning på detta problem så skulle jag
vara grymt tacksam, suttit ett tag med detta nu och håller
på att bryta samma!! aaahhh :)
Mvh
AdrianSv: Problem med prototype och ärvd klass/metod
But you can emulate OOP functionality.
Try this code
-test.js---------->8--------------
function Parent()
{
this.intVal = 10;
this.boolVal = true;
this.strVal = "Hej";
return this;
}
function Child()
{
var result = new Parent();
result.boolVal = false; // this overloads Parent.boolVal
result.doubleVal = 10.1;
return result;
}
var p = new Parent();
WScript.Echo(p.boolVal);
var ch = new Child();
WScript.Echo(ch.boolVal);
------------------>8--------------
Tested with JScript 5.5Sv: Problem med prototype och ärvd klass/metod
Sv:Problem med prototype och ärvd klass/metod
So there is a bit of OOP functionality still there.
Your code does'nt help me, it's not following the prototype based
standard i'm using. I don't want to re-write my code structure, it's about
500 lines allready.
What i'm trying to do is assign a value to a superclass object which should
be able to be set under any object following the prototype chain.
There must be a way.
Thanks anyway.Sv:Problem med prototype och ärvd klass/metod
Jo jag testade den koden som jag hade skrivit och den funka faktiskt. Måste vara något
annat fel jag inte kan hitta. Min kod är bra mycket längre än det exemplet jag visade.
Tack för att du testade den :)Sv: Problem med prototype och ärvd klass/metod
Nu har jag kommit på problemet, vilket jag trodde det byggde på förut, fast
var inte säker.
När jag kör denna kod:
<html>
<head>
<title>Untitled</title>
<script>
function SuperClass(){
this.showSaveMenu = showSaveMenu ;
this.testValue = testValue ;
this.bCanSave = true;
}
function SubClass(obj){
}
SubClass.prototype = new SuperClass;
function showSaveMenu(){
alert(this.bCanSave)
this.bCanSave = false;
}
function testValue(){
alert(this.bCanSave);
}
// Denna körs när alla element är färdigladdade.
function intiSystem(){
mysuperclass = new SuperClass();
mysubclass1 = new SubClass();
mysubclass2 = new SubClass();
}
</script>
</head>
<body onload="intiSystem();">
Assign false via mysubclass1
<br>
<br>
Testa värde mysubclass1
Testa värde mysubclass2
</body>
</html>
Så blir det inte rätt, dvs mysubbclass1 kan inte sätta ett värde för
sitt parent objekt i kedjan, som ett annat objekt ur samma klass
också kommer ärva.
mysubclass1.bCanSave blir false
men
mysubclass2.bCanSave är fortfarande true
Vad kan detta bero på?
Testa koden själva...Sv:Problem med prototype och ärvd klass/metod
Sv: Problem med prototype och ärvd klass/metod
instans så att .bCanSave för varje object får ett eget värde även fast det inte
är satt i själva funktionen.
Vad jag har förstått så går detta inte att göra så mycket åt. Har nu löst
det med hjälp av följande:
function super(){
this.bCanSave = true;
}
function sub(){
this.base = super;
}
sub.prototype = new super;
mysuper = new super;
mysub1 = new sub;
mysub2 = new sub;
mysub1.base.bCanSave = false
nu blir både mysub1 och mysub2 false.
Om någon annan här har en annan lösning då via prototype så skulle
jag vara väldigt tacksam.
Mvh
Adrian