2016-11-02 3 views
0

Javascriptがネストされたオブジェクトのインスタンス

function OB(a){ 
 
    this.a; 
 

 
    function Node(b){ 
 
    this.b = b; 
 
    } 
 
} 
 
var a = new OB("test"); 
 
var b = new Node("test2");

私は何をしたいことはOBの外に新しいノードを作るためにしていることを確認します。しかし、私はエラーが発生します。回避策は、OBコンストラクタをOBから分離することですが、後で "Node"を別の場所で使用したい場合は、名前の競合が発生する可能性があります。

+0

エラーはどのようなものですか?また、あなたは 'add'メソッドを呼び出す文/コンテキストとは何ですか? 'this.a'と' this.b'はどうするのですか?あなたがそこに置くように、彼らはただ何もしない表現です。彼らは 'a'または' b'プロパティを作成しません。 – trincot

+0

私は少し問題を単純化しました。私が得るエラーは、 "Uncaught TypeError:不正なコンストラクタ"です。 –

+1

これは簡単です:これを行わないでください。グローバルな 'Node'を望んでいないのであれば(そのように呼びますが)、関数内ではなく名前空間オブジェクトに置いてください。 – Bergi

答えて

0

ノード機能は、OB機能内にネストされています。親関数の外からその関数を呼び出すことはできません。

function OB(a){ 
    this.a; 
} 
function Node(b){ 
    this.b = b; 
} 
var a = new OB("test"); 
var b = new Node("test2"); 
0

なぜvarに返されるオブジェクトにNode関数をアタッチしないのですか?

function OB(a){ 
    this.a; 
} 

OB.prototype.Node = function (b){ 
    this.b = b; 
} 

var a = new OB("test"); 
var b = new a.Node("test2"); 
+0

これは、 'OB'のすべての呼び出しでまったく新しいコンストラクタ関数とプロトタイプを作成するためです。あなたは効率の理由からそれを望んでいません。 – Bergi

+0

そうであれば、それを関数OBのプロトタイプに追加することができます。私はこれがOPが目指しているものだと思います。 –

+0

はい、より良いアプローチを示すためにあなたの答えを[編集]してください。 – Bergi

関連する問題