2010-08-20 9 views
0

J'ai l'extrait suivant de JSAppeler une méthode d'un autre dans JS

var Customer : function() 
{ 
    this.ShipProduct : function() 
    { 
     //Logic for shipping product. If shipping successful, notify user 
     //Here I am trying to call Notify 
     //this.Notify(); // does not work 
    } 

    this.Notify = function() 
    { 
     //Logic for notify 
    } 
} 

Comment puis-je appeler Notify ShipProduct?

+0

Pouvez-vous essayer en déplaçant simplement la méthode notifier au-dessus de la méthode ShipProduct? – InSane

+0

@In Sane - Non, cela ne fonctionne pas – Nick

Répondre

8

Ce n'est pas JS, c'est-à-dire une collection d'erreurs de syntaxe.

Utilisez = lors de l'attribution des variables et des objets simples : à l'intérieur, ne confondez pas des objets simples et les fonctions, ne pas oublier les virgules, et ne préfixe pas les noms de propriété avec this..

var Customer = { 
    ShipProduct : function() 
    { 
     //Logic for shipping product. If shipping successful, notify user 
     //Here I am trying to call Notify 
     this.Notify(); // this does work 
    }, 
    Notify: function() 
    { 
     //Logic for notify 
    } 
} 

Customer.ShipProduct(); 
+0

Je ne crée pas un objet unique. Je voudrais créer plusieurs instances de cet objet et je crois savoir que la syntaxe que vous avez utilisée crée un tableau de fonctions associé. Je voudrais faire quelque chose comme var client = new Customer(); – Nick

0

Que diriez-vous:

var Customer = function() { 
    var notify = function() { 
     ... 
    }; 
    var shipProduct = function() { 
     ... 
     notify(...); 
     ... 
    }; 
    return { 
     notify: notify, 
     shipProduct: shipProduct 
    }; 
} 

Cela suppose que vous voulez exposer les deux fonctions - si notify est utilisé uniquement par Customer en interne, alors il n'y a pas besoin de l'exposer, donc vous renverront à la place comme ceci:

return { 
     shipProduct: shipProduct 
    }; 
1

Cela semble fonctionner:

<html> 
<head> 
<script type = "text/javascript" language = "JavaScript"> 
var Customer = function(){ 
    this.ShipProduct = function(){ 
     alert("hey!"); 
     this.Notify(); 
    }; 

    this.Notify = function(){ 
     //Logic for notify 
     alert("notify"); 
    }; 
}; 
</script> 
</head> 
<body> 
<script type = "text/javascript" language = "JavaScript"> 
var cust = new Customer(); 
cust.ShipProduct(); 
</script> 
</body> 
</html> 
+0

Cela ne fonctionne pas pour moi – Nick

1

Cet exemple semble correct sauf pour la première ligne, ce deux-points doit être un signe égal.

Le problème, je devine, a à voir avec comment vous appelez ShipProduct. Si vous faites comme ça, tout devrait fonctionner:

var customer = new Customer(); 
customer.ShipProduct(); 

Toutefois, si vous détachez la méthode et l'appeler directement, il ne fonctionnera pas. Tels que:

var customer = new Customer(); 
var shipMethod = customer.ShipProduct; 
shipMethod(); 

C'est parce que JavaScript repose sur la notation accesseur de point à lierthis. Je devine que vous passez la méthode autour, peut-être à un rappel Ajax ou quelque chose.

Ce que vous devez faire dans ce cas, il envelopper dans une fonction. Tels que:

var customer = new Customer(); 
var shipMethod = function() { 
    customer.shipMethod(); 
}; 
... later, in some other context ... 
shipMethod(); 
Questions connexes