0

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(バー.プロトタイプ);

4

3 に答える 3