1

問題があります。私はかなり大規模な JavaScript プロジェクトに取り組んでおり、OOP の使用方法を学んでいます。あなたが知っていると確信しているように、JSではちょっと奇妙です。

ここで私がやろうとしていることは次のとおりです。私が呼び出す基本「クラス」がありますAbstractAnimal。という別のクラスがありAnimalsます。Animalsクラス内には、Man、 、 という 3 つのグループがMonkeyありElephantます。これらのグループのそれぞれが を継承するようにしたいのですAbstractAnimalが、 に接続するのではなく、独自の機能にする必要がありAbstractAnimalます。

私はもともと次のようにしていました:

Animals.prototype.Man = AbstractAnimal;
Animals.prototype.Monkey = AbstractAnimal; //etc...

しかし、悲しいことに、それは私が必要とすることをしません。理由は次のとおりです。

AbstractAnimal.prototype.clicked = function() { console.log("clicked") };
//If I change Man...
animals.Man.clicked = function() { console.log("HA!"); };
//Monkey is effected too...
animals.Monkey.clicked();
//Console: "HA!"

上記の例では、Monkey がクリックされると、コンソールに「クリックされました」と表示されます。Man をクリックすると、「HA!」と表示されます。

だから私はここでそれを行うと思った何かを見つけました: javascript class inherit from Function class

そして、それはほとんど機能しましたが、完全ではありませんでした。これは縮小されたテスト ケースです: http://jsfiddle.net/9KRJk/2/

手伝ってくれませんか?ありがとう!

PS いいえ、実際には、動物全体は比喩的なものであり、実際に動物園をプログラミングしているわけではありません。:)

4

1 に答える 1

5

問題を完全に理解しているかどうかはわかりませんが、物事を複雑にしすぎているか、いくつかの概念が欠けている可能性がありますが、プロトタイプ チェーンは次のように表すことができます。

// Extends helper
Function.prototype.extends = function( parent ) {
  this.prototype = Object.create( parent.prototype );
};

function Animal() {}
Animal.prototype = {
  clicked: function() {
    console.log('animal');
  }
};

function Man() {}
Man.extends( Animal );
Man.prototype.clicked = function() {
  console.log('man');
};

function Monkey() {}
Monkey.extends( Animal );
Monkey.prototype.clicked = function() {
  console.log('monkey');
};

var animal = new Animal();
animal.clicked(); //=> 'animal'

var man = new Man();
man.clicked(); //=> 'man'

var monkey = new Monkey();
monkey.clicked(); //=> 'monkey'
于 2012-11-18T02:45:46.903 に答える