javascriptの継承というのは、こんな感じで行なっておけば良いのでしょうか?
//親オブジェクト
var Enermy = function(){
this.attack = function(){
console.log("attack");
}
}
//子オブジェクト
var Slime = function() {
this.escape = function() {
console.log("escape");
}
}
//継承
Slime.prototype = new Enermy();
//オブジェクト生成
var slime = new Slime();
slime.attack(); // output : "attack"
slime.escape(); // output: "escape"
Object.create()なるもので、プロトタイプ継承を行なうみたいなことが書かれていて、上記のようなことをObject.create()で実現しようと以下のように試みたのですが、当たり前ですがエラーとなり上手くいかず。。。
//親オブジェクト
var Enermy = {
attack: function() {
console.log("attack");
}
}
//子オブジェクト
var Slime = function() {
escape: function(){
console.log("escape");
}
}
//SlimeのprototypeにEnemyを入れる
Slime = Object.create(Enermy);
//オブジェクト生成
var slime = new Slime();
slime.attack();
slime.escape();
質問としましては、jsでの継承は1つ目の書き方で良いのかということと、2つ目のやり方で1つ目でやっていることを実現するためにはどうすれば良いのかを教えて頂きたいと言った内容となります。
どうぞよろしくお願いいたしますm(_ _)m
みんなの回答 1 件
1つ目の書き方で、継承は上手くいってると言えなくもないのかもしれません。
ですが、そもそもクラスとしてダメです。
;
function Enermy() { }
Enermy.prototype.attack = function () {
console.log("attack");
}
;
function Slime() { }
Slime.prototype = Object.create(Enermy.prototype);
Slime.prototype.constructor = Slime;
Slime.prototype.escape = function () {
console.log("escape");
}
;
var slime = new Slime();
;
もしくは、オブジェクトベースで継承関係を作りたいのならこうします。
;
var Enermy = { };
Enermy.attack = function () {
console.log("attack");
};
;
var Slime = Object.create(Enermy);
Slime.escape = function () {
console.log("escape");
};
;
var slime = Object.create(Slime)
;
実際はこんなに書いてるのは大変なので、ヘルパー関数を使うとよいです。
__proto__を使ったり、ES6コンパイラを使ってclass構文で書くともっとよく書けます。
関連するトピックス