2017-02-08 1 views
1

aufrufen Überprüfen Sie meinen Code unten, ich bin nur hier verloren, warum bekomme ich diesen Fehler. Irgendein Vorschlag bitte. Hier habe ich einen Klassentest gemacht und zwei Methoden check und nextfn hinzugefügt. Ich rufe check von nextfn an.Kann nicht eine Methode von innerhalb einer anderen Methode in Javascript

var test=function(){} 

test.prototype.check=function() 
{ 
    console.log("hello from checking"); 
} 

test.prototype.nextFn=function(){ 

    check(); 

    console.log("Hello from nextfn"); 
} 

Weiter

var t=new test(); 
t.nextfn(); 

Der Fehler ist

Uncaught ReferenceError: check is not defined(…) 

nun ein anderes Szenario betrachten;

test.prototype.anotherFn=function() 
{ 
    var p=new Promise(function(){ 
     this.check(); 
    }) 
} 

Jetzt auch gleichen Fehler erhalten;

Uncaught ReferenceError: check is not defined(…) 

Wenn

var t=new test(); 
t.anotherFn(); 
+4

'this.check();' – Igor

+2

auch ' new test() 'anstelle von' new text() ' – Blazemonger

+0

@Igor Kommentar zu erweitern, wurde die' check' Methode auf den Prototyp des Tests gesetzt. 'nextFn' ist Teil desselben Prototyps,' this' ist ein Schlüsselwort, das sich auf den Eltern/Prototyp bezieht. – flybear

Antwort

4

Die check Funktion auf der prototype des test Objekt aufruft.

Wenn Sie rufen nextFn wie folgt aus:

t.nextfn(); 

Der darauf folgende Rahmen wird dem t Instanz von „Typ“ test gebunden sein. Zugang innerhalb nextfn zu test 's Prototyp wird über this verfügbar sein.

So Zugriff checkthis mit:

this.check(); 

Dieses Zeug raschend verwirrend erhalten. Eine gute Referenz ist this book.

====

Für Ihre zweite scenerio ist das Problem, dass Sie this innerhalb einer Funktion aufzurufen versuchen, die seinen eigenen Anwendungsbereich hat.

Bereich in JavaScript ist in der Regel nicht Block Bereich, sondern Funktion Bereich. Es gibt viel mehr zu bieten, und ich würde empfehlen, ein Tutorial über Schließungen Lesen eine rundere Beschreibung zu erhalten, aber jetzt, versuchen Sie stattdessen:

test.prototype.anotherFn=function() 
{ 
    var self = this; // save reference to current scope 
    var p=new Promise(function(){ 
     self.check(); // use self rather than this 
    }) 
} 
+0

Arbeitete gut, fügte jetzt ein anderes Szenario in meiner Frage hinzu; Kannst du das bitte auch bitte klären. Ich verstehe, dass es jetzt in den Anwendungsbereich von p geht. Aber wie rufe ich dann die Funktionskontrolle auf? –

+0

@KOUSIKMANDAL Ich habe meine Antwort für den zweiten Teil der Frage aktualisiert –

+0

Vielen Dank. Perfekt arbeiten. :) –

Verwandte Themen