読者です 読者をやめる 読者になる 読者になる

Shut the fuck up and write some code

グダグダ言わずにコードを書きたいブログ

クラスの継承

JSでのクラスの書き方はわかったのだけど継承のさせ方がよく分からない・・・。

prototypeで継承させられるのは分かったのだけど、コンストラクタとかどうやって引き継げば良いのだ・・・super()なんてないし。

/* super class */
function animal(){
     this.constructer();
};

animal.prototype.constructor=function(){
     this.name="animal";
};

animal.prototype.getName=function(){
     return this.name;
};

animal.prototype.bark=function(){
      return "not bark";
};

/* sub class */
function dog(){
     this.constructor();//superの代わり
     this.name="dog";
};

dog.prototype=new animal();//継承

dog.prototype.bark=function(){
     return "bow";
};

var test1=new animal();
console.log(test1.getName()); //animal
console.log(test1.bark()); //not bark

var test2=new dog();
console.log(test2.getName());// dog
console.log(test2.bark()); //bow

このやり方だと簡単に引き継げるけどインスタンス生成時に引数渡す場合が面倒。うーむこれはイケてない書き方か。

色々調べてみるとapplyを使って引数を取得するのがいいみたいです。

/* super class */
function animal(name){
	 this.name=name;
};

animal.prototype.getName=function(){
     return this.name;
};
animal.prototype.bark=function(){
      return "not bark";
};

/* sub class */
function dog(name){
	animal.apply(this,arguments);
};

dog.prototype=new animal();//継承
dog.prototype.bark=function(){
     return "bow";
};

var test1=new animal("animal");
console.log(test1.getName()); //animal
console.log(test1.bark()); //not bark

var test2=new dog("dog");
console.log(test2.getName());// dog
console.log(test2.bark()); //bow

これで少しはすっきりしたけど。よく分かってません。うおーもうオライリー本買うしかないか。

JavaScript 第5版
JavaScript 第5版
posted with amazlet at 09.10.27
David Flanagan
オライリー・ジャパン
売り上げランキング: 12386

javascriptを学ぶに良い本って何だろ・・・探さないと!

広告を非表示にする