JavaScript の継承が典型的なオブジェクト指向言語 (Java、c++ など) とは大きく異なることは知っています。いろいろ調べてみると、クラスやクラス階層の作り方もいろいろあるようです。このため、JavaScript の継承について混乱しています。
次のコードを考えると
if (!com) var com = {};
if (!com.foobar) com.foobar = {};
com.foobar.Foo = {
foo : "foo",
bar : "bar",
baz : function () {
return true;
}
};
以下が許可されないのはなぜですか?com.foobar.Foo がコンストラクタではないのはなぜですか? Foo が関数ではなくオブジェクトだからでしょうか?
var baz = new com.foobar.Foo();
上記を行うことができないので、新しい Foo を作成するにはどうすればよいですか?
Foo を拡張したい場合は、次のようにすると思います。
var bar = Object.create(com.foobar.Foo, {buz: {value: "neat"}});
.. しかし、bar は Foo のサブタイプですか、それとも Foo のインスタンスですか? 次の出力は「未定義」であるため、Fooのインスタンスに傾いています
console.log(バー.プロトタイプ);