2017-05-16 1 views
0

Ich habe eine Klasse:Firing Ereignis außerhalb Klassenbereich javascript

var psTesting = (function(){ 

var privatevariable; 

function setVariable(value){ 
    privatevariable = value; 
    console.log('the variable value is ' + value); 
} 

function dismiss (callback) { 
    console.log('entro dismiss') 
    if(callback) callback(); 
    if(this.onDismiss) this.onDismiss(); 
} 

return { 
    pVariable : function(val) { 
     setVariable(val) 
    } 
} 
})(); 

psTesting.pVariable(22); 

psTesting.onDismiss = function(){ 
console.log('this is a onDismiss test'); 
} 

Ich möchte psTesting.onDismiss() die onDismiss Funktion von außerhalb der Klasse feuern können

Ich habe mit dem .call spielen versuchen, .anfügen .bind Zeug ohne Glück.

Danke, PA

+0

Versuchen Sie, 'psTesting.onDismiss()' aufzurufen? Oder versuchen Sie die interne 'dimiss()' Funktion aufzurufen? 'psTesting.onDismiss()' kann einfach direkt aufgerufen werden. Das interne 'follow()' hat keinen externen Zugriff, so dass es nicht aufgerufen werden kann. Um es von außen aufzurufen, müssen Sie einen öffentlichen Zugang zu ihm bereitstellen, wahrscheinlich ähnlich wie Sie 'pVariable' definieren. – jfriend00

+0

Keine Klasse. 'pTesting' ist einfach ein Objekt mit einer Methode von' pVariable' und innerhalb von 'follow' Funktion" this "bezieht sich auf die Funktion nicht' pTesting'. Also ist 'this.onDismiss' immer undefiniert. – GillesC

+0

Geben Sie eine 'onDismiss'-Methode zurück, die eine Callback-Funktion annehmen kann, sodass Sie sie innerhalb Ihres' pTesting'-Bereichs speichern und bei Bedarf ausführen können. – GillesC

Antwort

1

speichert eine Referenz intern mit dem Objekt, das Sie zurückkehren werden, so dass Sie es den Zugriff auf .onDismiss() können erhalten, die zu diesem Objekt wurde hinzugefügt.

var psTesting = (function() { 

    var privatevariable; 

    var obj = { 
     pVariable: function(val) { 
      setVariable(val) 
     } 
    } 

    function setVariable(value) { 
     privatevariable = value; 
     console.log('the variable value is ' + value); 
    } 

    function dismiss(callback) { 
     console.log('entro dismiss') 
     if (callback) callback(); 
     if (obj.onDismiss) obj.onDismiss(); 
    } 

    return obj; 
})(); 

psTesting.pVariable(22); 

psTesting.onDismiss = function() { 
    console.log('this is a onDismiss test'); 
}