php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.05.2011, 15:00  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard Js oop

Hey leute,

ich habe mich etwas in OOP in JS eingelesen und habe folgende codes gefunden

PHP-Code:
var Foo = function(){

this._privateMethod = function(){
//mach was
}

this.publicMethod = function(){
//mach was anderes
}

und das hier
PHP-Code:
var Foo = function(){}

Foo.prototype._privateMethod = function(){

}

Foo.prototype.publicMethod = function(){


nun wollte ich fragen, wo der unterschied zwischen den beiden varianten ist und welchen man eher nutzen sollte und wieso.

hoffe ihr könnt mir hier das erklären

MFG
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.05.2011, 15:09  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Fang mal hier an: http://molily.de/js/organisation-instanzen.html

Auch die weiteren JS-Artikel von dort sind sehr gut.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 12.05.2011, 15:10  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Die Funktion in Foo ist gewissermaßen der Konstruktor. Generell sind die Funktionen der Klasse "Foo" sozusagen dynamisch. Beim Anlegen eines Objektes werden sozusagen die Funktionsreferenzen in das Objekt kopiert und können später überschrieben werden. Beispiel:
PHP-Code:
var Foo = function() {
  
this.myfunc = function() { alert('MyFunc'); };
};
var 
FooObject = new Foo();
var 
FooObject2 = new Foo();
FooObject.myfunc();
FooObject2.myfunc();
FooObject.myfunc = function() { alert('OtherFunc'); };
FooObject.myfunc();
FooObject2.myfunc(); 
Probiere das mal aus.

Private Methoden reinzutun ist extrem schlechter Stil. Javascript kennt weder Vererbung noch private oder protected. Wenn man wirklich geschützte Methoden reintun will, geht beispielsweise folgendes Hilfskonstrukt:
PHP-Code:
var Foo = function(){

  var 
me this;

  var 
private1 = function() {
    
me.public2();
  };

  
me.public1 = function() {
    
private1();
  };

  
me.public2 = function() {
    
alert('Hello World');
  };
}; 
Was ist der Unterschied? "private1" lebt nur innerhalb des Konstruktors und auch nur durch Closures innerhalb der Methoden. Von außen lässt sich private1 weder aufrufen noch überschreiben.

Es gibt diverse Frameworks, die über ein paar Tricks auch echte Vererbung ermöglichen. Beispielsweise ExtJS/Sencha.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 12.05.2011, 15:16  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Mal sehen, ob ich das zusammenbekomme.

1. Prototypen-Methoden wirken allgemein (ähnlich wie in PHP-Klassen), wären this.methode()-Methoden an die jeweilige Objektinstanz gebunden werden. Sie werden also für jede Instanz neu „erstellt“ und zugewiesen und verbrauchen damit mehr Speicher. Stell Dir sowas vor:

PHP-Code:
var Foo = function(a){

  if (
a) {
    
this._privateMethod = function(){
    
//mach was
    
};

    
this.publicMethod = function(){
    
//mach was anderes
    
};
  }
  else {
    
this._privateMethod = function(){
    
//mach was anderes
    
};
  } 

- ist durchaus möglich in Javascript.

2. Prototypen-Methoden kennen this nicht. Du kannst dort mit Variablen wie Foo.myVar arbeiten, aber this ist zum Zeitpunkt der Methodenzuweisung noch nicht existent (entsteht erst bei new Object
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 12.05.2011, 15:28  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.114
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

also um das ganze mal zusammen zu fassen.. die erste von mir aufgeschriebene möglichkeit sollte man nutzen und prototypen sind ledeglich dazu da um neue methoden einer instanz hinzuzufügen bzw zu überschreiben..
habe ich das richtig verstanden? also sollte man prototype nicht nutzen oder?

bezüglich private und public.. im netbeans werden alle methoden die mit einem

this._ anfangen als private dargestellt und ohne _ als public ich kriege auch bei quellcode vervollständigung keine methode zu sehen die mit _ anfängt

sprich

PHP-Code:
var Foo = function(){
this._bar = function(){
alert("bar");
}

this.bar2 = function(){
alert("bar2");
}
}

var 
foo1 = new Foo();

foo1._bar();// geht nicht
foo1.bar2(); //geht.. 
also geht ja private und public in JS ... theoretisch
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 12.05.2011, 15:45  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Das mit dem Unterstrich ist lediglich eine Konventionen. Technisch werden die nicht private. Du kannst problemlos die mit Unterstrich aufrufen, egal was NetBeans da beim Code-Vervollständigen treibt.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 12.05.2011, 15:46  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Natürlich kannst du funktional wie oben beschrieben vererben. Alternativ singleton definieren und per Object.create vererben (achtung: ecma5).

Dazu gibts auch sehr viele spannende „pseudoklassische“ Vererbungen, hier paar bekannte Vertreter:

  • MooTools Class (leider verändern die den prototype nativer typen... )
  • Base.js (dean edwards)
  • Prototype.js Class (siehe mootools)
  • jQueryui widget core
Googlen, lesen, lesen, lesen und selbst ausprobieren, was dir am besten gefällt

Grüße


Basti
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 12.05.2011, 15:48  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
und prototypen sind ledeglich dazu da um neue methoden einer instanz hinzuzufügen bzw zu überschreiben..
habe ich das richtig verstanden?
Nein.
Zitat:
also sollte man prototype nicht nutzen oder?
Doch.

Prototypen spielen eine wichtige Rolle bei der Vererbung. Weitere Vorteile habe ich oben beschrieben.

http://developer.yahoo.com/yui/theater/
In
„Douglas Crockford — The JavaScript Programming Language“ oder
„Douglas Crockford — Advanced JavaScript“

wird das Prototyping-Konzept gut erklärt. Frag mich jetzt nicht wo.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 12.05.2011, 16:18  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Ahja, hier noch ein super Nachschlagewerk: javascript garden
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Website in OOP: Wie am besten vorgehen? GreenDelta PHP Einsteiger 13 29.01.2011 12:25
[Erledigt] OOP - Klassen richtig Designen, aber wie? Yamo PHP Einsteiger 8 01.01.2011 12:03
Immer und überall Oop? d0ne Off-Topic Diskussionen 5 27.09.2010 14:20
[Erledigt] OOP - Stil-Frage zur Objekterzeugung Baltasar PHP Tipps 2010 7 24.08.2010 17:39
OOP - Mysql Abfragen machen chief-thomson PHP Tipps 2010 10 10.06.2010 13:59
gleich oop lernen oder erst mal prozedural programmieren? Voltage PHP Tipps 2010 7 22.01.2010 16:46
Frage zu OOP Klassenplanung Yanko PHP Tipps 2010 3 21.01.2010 09:27
100% OOP wirklich sinnvoll ? Pehapeh PHP-Fortgeschrittene 31 04.12.2009 11:19
Was bringt OOP wenn Objekte nach jeder Seite sterben? majorbenks PHP Tipps 2009 9 18.11.2009 14:11
[Erledigt] OOP & PHP5 Buchempfehlung? boernard PHP Tipps 2009 2 26.02.2009 18:32
Einstieg in Objekt-orientierte-Programmierung (OOP) - Erste Versuche :-) echo PHP Tipps 2009 20 26.02.2009 11:08
Wer hilft mir bei OOP? echo Beitragsarchiv 27 23.02.2009 16:12
Einstieg in Objekt-orientierte-Programmierung (OOP) echo PHP Tipps 2009 50 17.02.2009 11:55
OOP verstanden? stayInside PHP Tipps 2009 4 24.01.2009 02:57
MVC vs. herkömmliches OOP stayInside PHP Tipps 2008 5 26.11.2008 22:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
js oop, objektorientierte programmierung php javascript, objektorientierte programmierung php.de, prototype oop \_\ private \this._\

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:03 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum