HighDots Forums  

Re: Seltsames Problem mit Opera, JSON und JS Objekt

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Re: Seltsames Problem mit Opera, JSON und JS Objekt in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Seltsames Problem mit Opera, JSON und JS Objekt - 07-11-2007 , 09:42 AM






Günther Bauer wrote:

Quote:
Mittels der Rückgabe soll dann automatisch eine Funktion der
erstellten Klasse aufgerufen werden, z. B. obj.machwas(response).
Hier scheitert das ganze dann. Ich bekomme an dieser Stelle dann von
Opera gesagt das er die Klasse nicht kennt.
Poste mal eine URL, wo wir uns das ansehen koennen. Was ist denn bei dir
eine JavaScript-Klasse? JavaScript 1.x kennt keine Klassen, die
Vererbung basiert auf Prototypen.

--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Seltsames Problem mit Opera, JSON und JS Objekt - 07-31-2007 , 04:08 PM






Günther Bauer wrote:
Quote:
Einen Link kann ich leider nicht posten, da dies zu unserer
Internetplattform gehört und noch nicht freigegeben wurde.
Eine Javascript Klasse definiere ich wie folgt:
Wie schon erwähnt: JavaScript 1.x hat keine Klassen.

Quote:
function class_obj()
Das ist vermutlich der Konstruktor eines Prototyp-Objekts, deshalb
sollte er mit einem grossen Anfangsbuchstaben beginnen (Code Style).

Quote:
{
var _privatevar = null;
// Private Funktion
function _irgendwas()
{
}
Die Analogie zur klassenbasierten Objektorientierung stimmt nicht. Das
ist keine private Funktion/Methode, d.h. eine nicht vererbbare, sondern
einfach eine Funktion, die nur innerhalb des lokalen
Konstruktorkontextes definiert ist.

Aufrufe der Form class_obj._irgendwas() sind in ECMAScript nicht
definiert. Wenn es dennoch funktioniert, ist es somit Ergebnis eines
implementationsabhängigen Verhaltens, welches sich schon morgen ändern
kann (so geschehen zwischen dem Release von Firefox 1.0.x und Firefox
1.5.x). Auf so etwas produktiven Code aufzubauen, bedeutet
zwangsläufig, die Wartungskosten unnötigerweise drastisch zu erhöhen.

Quote:
// Öffentliche Funktion
this.irgenwas = function()
{
}
Das wird schlicht eine Methode des mit dem Konstruktor erzeugten Objekts
(`this' referenziert es bei Konstruktoraufruf). Sofern this.irgendwas()
also nicht Closures enthält, kann man es effizienter definieren:

Quote:
}
class_obj.prototype.irgendwas = function()
{
// ...
};

Es wird dann nur ein Function-Objekt erzeugt (statt bei jedem
Konstruktoraufruf eines) und die mit dem Konstruktor erzeugten Objekte
erben die Methode über die Prototyp-Kette.

Quote:
Die Fehlermeldungen von Opera lauten wie folgt:
Inline script thread
Error:

name: TypeError

message: Statement on line 1: Could not convert undefined or null to
object
Backtrace:
Line 1 of linked script http://www.xxx.de/json.php?do=irgendwas

obj.fnc({"status":1, "value":"irgendwas"});
Da es nach ECMAScript 3 syntaktisch korrekt ist (und ich keine
Opera-Version vor 6.0 kenne), liegt es wahrscheinlich daran, dass `obj'
keine Objektreferenz ist (sondern `undefined' oder `null'). Debugging
in Firefox mit Firebug und/oder in Opera mit

window.alert(obj);

vor dem Aufruf sollte Aufschluss bringen.

Quote:
[TOFU: Text Oben, Fullquote Unten]
http://lernst.de/zitieren/kriegst.de/antworten


PointedEars
--
Prototype.js was written by people who don't know javascript for people
who don't know javascript. People who don't know javascript are not the
best source of advice on designing systems that use javascript.
-- Richard Cornford, <f806at$ail$1$8300dec7 (AT) news (DOT) demon.co.uk>


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.