2017-09-09 4 views
-1

私はオブジェクトの配列を保持するプロトタイプオブジェクトを持っています。配列オブジェクトの1つが関数に渡され、元のオブジェクトにアクセスする必要があります。元のプロトタイプに格納された変数を与えられた関数内で元のプロトタイプオブジェクトを取得

元のオブジェクトの名前を知らずにこれを行う方法はありますか?

例:

function ObjectA { 
    this.attribute[0] = new ObjectB; 
} 

ObjectB.prototype.func = function (s) { 
    //I have the attribute[0] (an object) here, i need to access A 
     from it 
} 

var objectA = new ObjectA(data); 
objectA.attribute[0].func(3); 
+0

コード部分を改善するために質問を編集する必要がありますか? – Kalamarico

+0

あなたの質問は明確ではありません – marvel308

+0

あなたの質問のコードは、プロトタイプが設定されていることを示していません。 –

答えて

1

いいえ、できません。 ObjectAまたはobjectA(あなたが望むものは不明)を関数に渡す必要があります。

ObjectB.prototype.func = function (s, target) { 
    // do whatever you want with `target` 
} 

、あなたは

objectA.attribute[0].func(3, objectA); 

でそれを呼び出す必要があるだろうしかし、あなたはまた、オブジェクトのfuncメソッドを置き換えることができます:関数は、引数としてその値を受け入れることを有することを意味する

もう1つは常にObjectAに渡します:

function ObjectA { 
    const self = this; 
    const objB = new ObjectB; 

    objB.func = function(s) { 
    ObjectB.prototype.func.call(this, s, self); 
    }; 

    this.attribute[0] = objB(); 
} 

あなたは

objectA.attribute[0].func(3); 

として、あなたがこれをしたい理由をあなたが説明されていないので、これらのソリューションは、またはあなたがやろうとしている何のために過度に複雑なまたは適切でない場合があります関数を呼び出す保つことができます。

+0

ここに投稿した2番目の解決策は正しい方向に私を指摘し、私はそれを働かせました。本当に助けをありがとう、ありがとう。 – timdirusso

0

あなたの元の質問のコードが設定されている任意のプロトタイプを示しませんでした。あなたが正しく尋ねていることを理解すれば、あるオブジェクトのインスタンスを別のオブジェクトのプロパティとして格納しようとしています。これは、あなたが探しているものです。

JavaScriptでの継承がどのように動作するかのプロトタイプの詳細については

// This is the not a prototype. It's just a regular constructor 
 
// function that can be used to create instances of objects 
 
function ObjectA(){ 
 
    this.someProp = "test"; 
 
} 
 

 
// This is the object that will gain access to the other's properties 
 
function ObjectB() { 
 
    // You can't populate an array unless you have one first: 
 
    this.attribute = []; 
 
    
 
    // Now, you can populate it. But, you aren't utilizing prototypes 
 
    // with this code, you are just storing an instance of an object 
 
    // in an instance property of this one: 
 
    this.attribute[0] = new ObjectA(); 
 
} 
 

 
// You need an instance to work with: 
 
var B = new ObjectB(); 
 

 
// Now that new instance can get you properties of another object it 
 
// is storing as a property: 
 
console.log(B.attribute[0].someProp);

、それを説明しthis other post of mineを参照してください。

+0

'ObjectB.prototype.func'への割り当ては、プロトタイプを設定していますか? OPは 'ObjectB'の宣言を省略したと思います。 –

+0

コードブロックを編集しました。この場合、B.attribute [0] .somePropをパラメータとする別の関数があります。その同じ機能の中で、私はBへのアクセスが必要です。私はsomePropにアクセスするだけです – timdirusso

+0

@FelixKling元の投稿はそのコードを含んでいませんでした。 –

関連する問題