2016-05-06 24 views
3

Gegeben die folgenden wie kann ich dies aktivieren, um korrekt zu funktionieren?JavaScript kann nicht auf die Geschwistermethode zugreifen

return { 

    methodA: function() { 
     return methodB(); 
    }, 
    methodB: function() { 
     alert("hi"); 
    } 
} 
+1

'Rückkehr this.methodB();' –

+0

, die nicht für mich arbeiten –

+0

gibt es mehr Code, um dieses oder ist das alles. –

Antwort

5

Sie müssen den Kontext verweisen, über this.

var foo = { 

    methodA: function() { 
     return this.methodB(); //context 
    }, 
    methodB: function() { 
     alert("hi"); 
    } 
} 

foo.methodA(); //alerts "hi" 
+1

Solange Sie es wie 'foo.methodA()', nur ein Warnung, so dass das OP es vermeidet, 'var func = foo.methodA' zu tun und' func() 'aufruft. [Siehe meine Antwort] (http://stackoverflow.com/a/37072507/227299) für eine sicherere Alternative. –

0

Es scheint, dass Sie von einem Modul wie Funktion zurückkehren. Der sichere Weg ist nicht, this zu verwenden, es ist eine Referenz auf das Objekt zu behalten, so dass es egal ist, wie die Funktion aufgerufen wird.

function getObj() { 
    var obj = { 
    methodA: function() { 
     return obj.methodB(); 
    }, 
    methodB: function() { 
     alert("hi"); 
    } 
    }; 
    return obj; 
} 

var myObj = getObj(); 

// Works 
myObj.methodA(); 
// Works but would not work if you were using `this` as suggested by Utkanos. 
someDomElement.addEventListener('click', myObj.methodA); 
Verwandte Themen