9

別のオブジェクト内にオブジェクトを定義することは可能ですか?私はこのようなことを考えています:

function MyObj(name) {
    this.name = name;

    function EmbeddedObj(id) {
        this.id = id;
    }
}

そして、次のようにEmbeddedObjを作成できます。

var myEmbeddedObj = new MyObj.EmbeddedObj();

ボーナスポイントのミーム:Objectception!:o

4

3 に答える 3

8

はいといいえ。

function MyObj(name) {
    this.name = name;
}
MyObj.EmbeddedObj = function EmbeddedObj(id) {
    this.id = id;
}
new MyObj.EmbeddedObj(42);

実行されますが、「埋め込みオブジェクト」に対して期待される結果が得られない可能性があります(コメントを参照)。

式の場合は最初new exprに評価されるため、この場合は、コンストラクターとして評価された関数オブジェクトを使用して新しいオブジェクトを作成することに注意してください。(式に括弧が付いたばかげたルールがありますが、それは別の話です。)MyObject.EmbeddedObj


ここで、「親」と「子」の関係が必要な場合は、より回りくどい方法を使用してそれを行うことができます。

function Parent (name) {
   this.name = name;
   var parent = this; // for closure
   this.Child = function Child () {
      this.Parent = parent;
   }
}

// create new parent object
var parent = new Parent();       
// each new parent has a different Child constructor and
// any function-object can be used as a constructor
var child = new parent.Child();
// true: child is "bound" to parent
child.Parent === parent;
于 2012-04-07T02:08:10.167 に答える
3
function MyObj(name) {
    this.name = name;
}

MyObj.EmbeddedObj = function(id) {
    this.id = id;
}

var myEmbeddedObj = new MyObj.EmbeddedObj();

それはあなたが求めているもののように見えますか?

于 2012-04-07T02:08:00.217 に答える
0

ネストされたコンストラクターの例を次に示します。

function cimdb(name,review,year) {

 function nestedConstructor(name,review,year) {
    this.name = name;
    this.review = review;
    this.year = year
};

    this.name = name;
    this[name] = new nestedConstructor(name,review,year);

}



  var lionking = new cimdb("The Lion King", "The lion King review ..", 2015);

これが、ネストされたオブジェクトコンストラクターの意味だと思います。

于 2015-01-22T12:37:24.687 に答える