I also have this running example on jsfiddle
サンプル:私は私が働いている小規模なプロジェクトを持っていると私は、継承の種類を実装したかった本当に簡単なJavaScriptを「継承」(質問の例)
function Animal(o) {
o.class = Animal;
o.name = o.name ? o.name : "Animal"; // Defaults
o.age = o.age ? o.age : 0; // Defaults
o.weight = o.weight ? o.weight : 0; // Defaults
o.say = o.say ? o.say : "?";
Animal.isOnEarth = true; // "static variable"
return o;
}
function Cow(o) {
o.class = Cow;
o.name = o.name ? o.name : "Cow"; // Defaults
o.milk = o.milk ? o.milk : 0; // Defaults
o.say = o.say ? o.say : "MOOO";
return Animal(o); //Inheritence
}
function Dog(o) {
o.class = Dog;
o.isCrazyLab = o.isCrazyLab ? o.isCrazyLab : false;
o.say = o.say ? o.say : "WOOF";
return Animal(o) //Inheritence;
}
function Labradore(o) {
o.class = Labradore;
o.isCrazyLab = o.isCrazyLab ? o.isCrazyLab : true;
o.say = o.say ? o.say : "YARRWL";
return Dog(o) //Inheritence;
}
var cow = Cow({});
var bessy = Cow({name:"bessy",milk:25});
var spot = Dog({name:"spot"});
var hugo = Labradore({name:"hugo"});
document.write("True or false, all these animals live on earth " + Animal.isOnEarth + " A cow says " + cow.say + "... bessy's name is " + bessy.name + " a " + spot.name + " says " + spot.say + " " + hugo.name + " says " + hugo.say);
。私はいくつかのサンプルをオンラインで見ましたが、JavaScriptの基本的な動作を修正するすべてのリグマームルルを通過することが重要なのはどういうことなのかよくわかりません。私にとっては、javascriptのクラス概念を拡張して、別の言語のように「感じる」ように感じるだけで、いくつかの行を節約できますが、多くのコア機能を追加するようには見えません。しかし、私は教育されて満足しています:)
いくつかの質問
この方法で動作するライブラリはありますか?
これを行う際の長所と短所はありますか?
これをしないと根本的な理由はありますか?
一般的な考えですか?
ああ、非常に良い、このフィードバックありがとうございます – samwise
@サムワイル:いいえ心配。興味があれば、私のブログで相続に関するかなり徹底的な記事を書いています:http://blog.niftysnippets.org/2009/09/simple-efficient-supercalls-in.html私は再訪することを意味していますそれはJavaScriptの標準的なプロトタイプの継承に文法的な砂糖が詰まっているだけなので、用語を「クラス」の概念から外すように変更しています。JavaScriptで「クラス」用語を使用することは非公式に行う必要があります。本当に適用されます。 –