php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ?

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 06-03-2008, 04:04
zerni
 Member
Links : Onlinestatus : zerni ist offline
Registriert seit: Oct 2006
Beiträge: 268
zerni ist zur Zeit noch ein unbeschriebenes Blatt
Standard [JavaScript] private von privilegierte Methode aus aufrufen

Hallo allerseits!

Ich hab mal eine Frage zu diesem Gefüge:

Code:
function MyClass(){

  this.interval = false;

  this.start = function(){
    this.interval = window.setInterval("alertMe", 1000);
  }

  this.stop = function(){
      window.clearInterval(this.interval);
  }

  function alertMe(){
    alert("RING RING RING");
  }

}
Wenn ich nun start() aufrufe sagt mir firebug:
alertMe is not defined
../js/myclass.js
Line 6

Etwas seltsam, weil alertMe in der Klasse liegt. Weiss einer Rat?

Gruß & Thx
zerni
__________________
Killerspiele sollten in der Größenordnung von Kinderpornografie eingeordnet werden.(G. Beckstein)
- ...und solche Behauptungen in "falsches Resourcenmanagement"
Mit Zitat antworten
  #2 (permalink)  
Alt 06-03-2008, 10:07
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

this.alertMe() mal ausprobiert?
Mit Zitat antworten
  #3 (permalink)  
Alt 06-03-2008, 10:18
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
this.interval window.setInterval("alertMe()"1000); 
gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #4 (permalink)  
Alt 06-03-2008, 10:46
E.T.
 Registrierter Benutzer
Links : Onlinestatus : E.T. ist offline
Registriert seit: Nov 2003
Beiträge: 240
E.T. ist zur Zeit noch ein unbeschriebenes Blatt
E.T. eine Nachricht über ICQ schicken
Standard

PHP-Code:
var alertMe = function(){
    
alert("RING RING RING");
  } 
__________________
Download ET-Chat v3.x.x
Mit Zitat antworten
  #5 (permalink)  
Alt 06-03-2008, 10:46
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Der String, den du setInterval() übergibst muß ausführbarer Code sein. Das ist bei dir nicht der Fall. "alertMe()" würde eine Funktion aufrufen und wäre damit der Sache schon einen Schritt näher. Fragt sich nur noch, wie du "MyClass.alertMe()" aufrufen kannst oder besser noch "this.alertMe()".

Ich sehe zwei Möglichkeiten:
Code:
function Nerv(myName) {
  this._interval = null;
  this._myName = myName;
}
Nerv.prototype._interval;
Nerv.prototype.start = function() {
  this._interval = window.setInterval(this._myName+'.alertMe()', 2000);
}
Nerv.prototype.stop = function() {
  window.clearInterval(this._interval);
}
Nerv.prototype.alertMe = function() {
  alert('RING RING RING');
}

n = new Nerv('n');
n.start();
Problem hierbei: Die Methode start muß den Namen der Instanz kennen. Ich habe ihn einfach bei der Konstruktion übergeben. Aber das ist fehleranfällig und geht sowieso nur, wenn der Name bekannt ist.

Code:
var Nerv = {
  _interval: null,
  start: function() {
    this._interval = window.setInterval('Nerv.alertMe()', 2000);
  },
  stop: function() {
    window.clearInterval(this._interval);
  },
  alertMe: function() {
    alert('RING RING RING');
  }
}

n = Nerv;
n.start();
Hier gefällt mir persönlich der Aufruf in setInterval() besser, aber es leider kein Aufruf am instanziierten Objekt, sondern eher static.

Vielleicht hat jemand noch eine bessere Idee - für mich ist es im Moment noch ein wenig früh.
Mit Zitat antworten
  #6 (permalink)  
Alt 06-03-2008, 10:57
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Jetzt wirkt der Kaffee langsam.

Beim ersten Beispiel dachte ich an Reflection und fand keinen anderen Weg als den oben gezeigten. Aber jetzt fiel mir das ein:
Code:
Nerv.prototype.start = function() {
  var self = this;
  this._interval = window.setInterval(function(){ self.alertMe(); }, 2000);
}
Diese anonyme Methode kennt ihre Umgebung (Closure) und damit auch self.
Mit Zitat antworten
  #7 (permalink)  
Alt 06-03-2008, 11:28
E.T.
 Registrierter Benutzer
Links : Onlinestatus : E.T. ist offline
Registriert seit: Nov 2003
Beiträge: 240
E.T. ist zur Zeit noch ein unbeschriebenes Blatt
E.T. eine Nachricht über ICQ schicken
Standard

Warum alles so kompliziert?

Das funkzt auch:
PHP-Code:
<script>
function 
MyClass(){

  
this.interval false;

  
this.start = function(){
    
this.interval window.setInterval(alertMe1000);
  }

  
this.stop = function(){
      
window.clearInterval(this.interval);
  }

  var 
alertMe = function (){
    
alert("RING RING RING");
  }

}

window.onload=function(){
 var 
obj = new MyClass;
 
obj.start();
}
</script> 
__________________
Download ET-Chat v3.x.x
Mit Zitat antworten
  #8 (permalink)  
Alt 06-03-2008, 11:53
E.T.
 Registrierter Benutzer
Links : Onlinestatus : E.T. ist offline
Registriert seit: Nov 2003
Beiträge: 240
E.T. ist zur Zeit noch ein unbeschriebenes Blatt
E.T. eine Nachricht über ICQ schicken
Standard

Oder noch eleganter mit Datenübergabe an die Methode:
PHP-Code:
<script>
function 
MyClass(){

  
this.interval false;

  
this.start = function(bla){
    
this.interval window.setInterval(function(){alertMe(bla);}, 1000);
  }

  
this.stop = function(){
      
window.clearInterval(this.interval);
  }

  var 
alertMe = function (text){
    
alert("RING RING RING "+text);
  }

}

window.onload=function(){
 var 
obj = new MyClass;
 
obj.start('Telefon');
}
</script> 
__________________
Download ET-Chat v3.x.x
Mit Zitat antworten
  #9 (permalink)  
Alt 06-03-2008, 11:55
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von E.T.
Warum alles so kompliziert?
Deine Lösung ähnelt der zweiten Variante in meinem ersten Beitrag: alertMe() wird nicht an der Instanz gerufen (hat keine this Referenz).
Code:
function MyClass(){
  this._interval = false;
  this._alert = 'RING RING RING';
  this.start = function(){
    this._interval = window.setInterval(alertMe, 2000);
  }
  this.stop = function(){
      window.clearInterval(this._interval);
  }
  var alertMe = function(){
    alert(this._alert);  // undefined!
  }

}

obj = new MyClass();
obj.start();
EDIT:
Gleiches gilt fürs 2. Beispiel: Kein this.
Btw: Mit window.setInterval(alertMe, 1000, bla); kann man auch Daten übergeben (auch im IE?).


Geändert von onemorenerd (06-03-2008 um 12:01 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 06-03-2008, 16:33
zerni
 Member
Links : Onlinestatus : zerni ist offline
Registriert seit: Oct 2006
Beiträge: 268
zerni ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok hab es jetzt erstmal so realisiert:

Code:
window.setInterval(alertMe, 2000);
Noch eine Frage: wie kann ich denn sowas wie eine Callback function realisieren?

doSomething(param1, param2, callback);

so??

Code:
doSomething(param1, param2, callback){

callback();

}
__________________
Killerspiele sollten in der Größenordnung von Kinderpornografie eingeordnet werden.(G. Beckstein)
- ...und solche Behauptungen in "falsches Resourcenmanagement"

Geändert von zerni (06-03-2008 um 16:36 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 06-03-2008, 16:40
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

Das ist ein typischer Anwendungspunkt von apply in javascript:
http://www.webreference.com/js/column26/apply.html
Code:
function MyClass(){
 _ = this;
 this._interval = false;
 this._alert = 'RING RING RING';
 this.start = function(){
  this._interval = setInterval(function(){alertMe.apply(_)}, 2000);
 }
 this.stop = function(){
  window.clearInterval(this._interval);
 }
 var alertMe = function(){
  alert(this._alert);  // undefined!
 }
}

obj = new MyClass();
obj.start();
Mit Zitat antworten
  #12 (permalink)  
Alt 06-03-2008, 17:36
zerni
 Member
Links : Onlinestatus : zerni ist offline
Registriert seit: Oct 2006
Beiträge: 268
zerni ist zur Zeit noch ein unbeschriebenes Blatt
Standard

habt ihr evtl noch eine etwas ausführlichere Erklärung zu call() und apply()? Google ist gerade offline.. ich fühl mich direkt so unwissend

mit apply ist es mir aber trotzdem nicht möglich den Wert von this._alert auszugeben oder?
__________________
Killerspiele sollten in der Größenordnung von Kinderpornografie eingeordnet werden.(G. Beckstein)
- ...und solche Behauptungen in "falsches Resourcenmanagement"
Mit Zitat antworten
  #13 (permalink)  
Alt 07-03-2008, 17:08
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

Doch, ist es. Versuche mal mein Beispiel. Mit apply und call kannst du eine Methode eines Objekt dem scope eines anderen Objekts anhängen.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:25 Uhr.