0

コンストラクター関数「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関数を継承する方法に何か問題があると思いますが、私の人生では解決策を見つけることができませんでした。

これらの関数の名前を付けるために使用すべき正しい方法は何ですか?

4

1 に答える 1

1

私はかなりのものを見てきましたが、名前空間のプロトタイプを悪用しています。素敵でシンプルで何が問題なのですか:

var Animals = {
   Crocodile: {

   }
}

または、コンストラクターの方法が必要な場合:

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

var a = new Animals();
var c = new a.Crocodile();
于 2012-07-06T09:49:34.717 に答える