0

名前空間とオブジェクトに問題があります。私はこれが初めてなので、本当に混乱しています。親オブジェクトのメソッドを継承するために、配列内の 1 つのオブジェクトが必要です。

これが私のコードです:

 var obj = {

   arr1:['one', 'two'],
   arr2:[],

   init:function() {
       for(var x=0; x<this.arr1.length; x++) {
           this.arr2.push(new this.myfunc1(x, this.arr1[x]));
       }
       this.arr2[0].myfunc2();
   },

   myfunc1:function(x, name) {
        this.index = x;
        this.name = name;
   },

   myfunc2:function() {
        alert(this.index + ' ' + this.name);
   }

};

obj.init();

オブジェクトの arr2 に対して myfunc2 を継承するにはどうすればよいですか? これはプロトタイプで使用されていますか?

「Uncaught TypeError: Object [object Object] has no method 'myfunc2'」を返します

4

1 に答える 1

0

私が見るように、あなたはあなたが作成しているオブジェクトに「obj」のメソッドを持ちたいと思っています

this.arr2.push(new this.myfunc1(x, this.arr1[x]));

簡単です。これらのオブジェクトのコンストラクターはthis.myfunct1()であるため、コンストラクターのプロトタイププロパティでプロトタイプオブジェクトを割り当てる必要があります。

this.myfunct1.prototype = this;

for(var x=0; x<this.arr1.length; x++) {
    this.arr2.push(new this.myfunc1(x, this.arr1[x]));
}

// WORKS!!!
this.arr2[0].myfunc2();

そして、「this」(obj)は作成されたオブジェクトのプロトタイプです

于 2012-10-05T10:59:04.640 に答える