1

私はJavaScriptに取り組んでいて、いくつかの検証で行き詰まりました:

パラメータとして指定された変数がオブジェクトのインスタンスのインスタンスであることを確認したいと思います。より明確にするために、ここに例があります:

var Example = function () {
    console.log ('Meta constructor');
    return function () {
        console.log ('Instance of the instance !');
    };
};

var inst = new Example();
assertTrue(inst instanceof Example.constructor); // ok

var subInst = new inst();
assertTrue(subInst instanceof Example.constructor); // FAIL
assertTrue(subinst instanceof inst.constructor); // FAIL

subInstそれがインスタンスであることを確認するにはどうすればよいExample.{new}ですか?またはinst.constructor

4

2 に答える 2

1

まず第一に、あなたはに対してチェックしません、あなた.constructorは構築関数に対してチェックします、それはExampleです。プロパティをテストするときはいつでも.constructor、これはインスタンスで見つかったものになります(コンストラクターのプロトタイプで設定した場合)。

それで

(new Example) instanceof Example; // true

次に、Example関数が関数を返している場合、それExampleは実際にはコンストラクターではないため、その関数に対していかなる種類のプロトタイプの継承チェックも実行できません。コンストラクターは常にオブジェクトを返し、そのオブジェクトはコンストラクターのインスタンスになります。

代わりに、コンストラクターとして使用される可能性のある関数を作成するファクトリ関数があります。関数はとのinstanceofチェックにのみ合格します。FunctionObject

var Ctor = example(); // PascalCase constructor, camelCase factory
var inst = new Ctor();
inst instanceof Ctor; // true

しかし、@frankyによって投稿されたリンクを見てください。それはあなたが何をする必要があるかについての洞察をあなたに与えるはずです。

于 2012-10-22T07:52:21.727 に答える
1
subInst.__proto__ == inst.prototype
于 2012-10-22T07:55:41.740 に答える