2012-07-06 7 views
0

J'ai une fonction constructeur « Animaux », qui est l'espace de nommage d'autres fonctions de constructeur, « Crocodile » et « Monkey »:prototypal Les espaces de noms

var Monkey = function(Animals) { 
    this.Animals = Animals; 
}; 

Monkey.prototype.feedMe = function() { 
    this.Animals.feed(); 
}; 

var Crocodile = function(Animals) { 
    this.Animals = Animals; 
}; 

Crocodile.prototype.feedMe = function() { 
    this.Animals.feed(); 
}; 

var Animals = function(zoo) { 
    this.zoo = zoo; 
}; 

Animals.prototype.feed = function() { 
    //feed the animal 
}; 

Animals.prototype.Monkey = function() { 
    this.Animals = Animals.prototype; 
}; 

Animals.prototype.Monkey.prototype = Monkey.prototype; 

Animals.prototype.Crocodile = function() { 
    this.Animals = Animals.prototype; 
}; 

Animals.prototype.Crocodile.prototype = Crocodile.prototype; 

Avec l'intention que je devrais pouvoir faire ce qui suit:

var animals = new Animals("NY"); 
var monkey = new animals.Monkey(); 

monkey.feed(); 

Je reçois une erreur indiquant que monkey.feed() n'est pas une fonction. Je suppose que je fais quelque chose de mal avec la façon dont je suis héritant de la fonction de singe dans la fonction constructeur d'animaux, mais pour la vie de moi, je ne l'ai pas été en mesure de trouver la solution.

Quelle est la bonne méthode que je devrais utiliser ces espaces de nommage fonctions?

+0

'Animals.prototype.feed() {// nourrir l'animal };' n » t une fonction - vous avez omis le mot-clé 'function'. – Graham

+0

Désolé, c'était un oubli quand je copiais le code. Corrigée. –

Répondre

1

J'ai vu pas mal de choses, mais abuser de prototypes pour namespaces, ce que le diable. Quel est le problème avec une belle et simple:

var Animals = { 
    Crocodile: { 

    } 
} 

Ou si vous voulez que le chemin du constructeur:

var Animals = function() { 
    return { 
     Crocodile: function() {} 
    } 
}; 

var a = new Animals(); 
var c = new a.Crocodile();