• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Zugriff auf Klassenfuntionen aus SubFunctions

FXJava

New member
Hallo,

ich beschäftige mich erst seit kurzem mit JS und habe wohl ein Verständnisproblem mit dem Scope von JS-"Klassen".

Ich habe folgendes:
Code:
function Klasse() {

    this.Func1 = function( ){
console.log('1');
      }

    this.Func2 = function( ){
       this.Func1(); // geht  ; 
       function Beta() {
        this.Func1(); // geht nicht 
}    
      Beta();
      }

Wie kann ich aus einer Subfunktion auf die public functions der Klasse zugreifen?
Kleiner Tipp wäre prima.

Gruß
FX
 
du hast viele möglichkeiten.
da du beta ohne context aufrufst, hat beta auch keine context, bzw. den globalen scope als context.
du musst jetzt entweder dafür sorgen, dass beta den context von func1 bekommt oder ab es6 kannst du auch verhindern, dass ein neuer context erzeugt wird.
das 1. geht z.b mit bind
Code:
var beta = function()
{
  this.Func1();
}.bind(this);
beta();
oder du machst beta zu einer klassenmemberfunktion
Code:
this.beta = function()
{
  this.Func1();
};
this.beta();
das 2. geht mit arrowfunctions
Code:
var beta = () =>
{
  this.Func1(); // geht nicht 
}    
beta();
 
Vielen Dank für die Tipps.

Die 1. Lösung funktioniert für mich.
Ich habe zum Verständnis noch eine Frage
da du beta ohne context aufrufst, hat beta auch keine context, bzw. den globalen scope als context.

Beta() ist doch eine private function der Menberfunction Func2().
Wird der Context hier nicht vererbt?
 
Beta() ist doch eine private function der Menberfunction Func2().
es gibt in js keine echten privaten funktionen, sondern nur funktionen welche durch ihren scope weiter außen nicht sichtbar/zugreifbar sind.

der context der funktion ergibt sich immer erst beim aufruf. nur durch diesen ist eine memberfuktion auch wirklich an eine instanz gebunden.
Code:
function Klasse()
{
    this.a = 1;
    this.func = function()
    {
      console.log(this.a);
    };
}
var inst = new Klasse();
var xxx = { };
xxx.func = inst.func;
xxx.func();
den context einer funktion kannst du also immer erkennen, weil er beim aufruf davorsteht. steht keiner davor
Code:
var beta = inst.func;
beta();
ist es das globale objekt(im strict mode wird this dann nicht gesetzt)
Code:
function beta()
{
  console.log(this === window); 
}
beta();
 
Zurück
Oben