原型命名空间

Prototypal Namespacing

本文关键字:命名空间 原型      更新时间:2023-09-26

我有一个构造函数"Animals",它命名了一些其他构造函数,"Crocodile"和"Monkey":

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;

目的是我应该能够执行以下操作:

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

我收到一个错误,说monkey.feed()不是一个函数。我假设我在 Animal 构造函数中继承 Monkey 函数的方式做错了,但在我的一生中,我一直无法找到解决方案。

我应该使用什么正确的方法来为这些函数命名?

我见过很多东西,但是滥用命名空间的原型,到底是什么。一个漂亮而简单的问题是什么:

var Animals = {
   Crocodile: {
   }
}

或者,如果您想要构造函数方式:

var Animals = function () {
    return {
       Crocodile: function () {}
    }
};
var a = new Animals();
var c = new a.Crocodile();