2017-09-09 1 views
-1

J'ai un objet prototype qui contient un tableau d'objets. Un des objets du tableau est passé à une fonction et j'ai besoin d'accéder à l'objet d'origine à partir de laquelle il est venu ...Récupère l'objet prototype d'origine dans une fonction à partir d'une variable stockée dans le prototype original

Y at-il des moyens de le faire sans connaître le nom de l'objet d'origine?

Exemple:

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

Peut-être que vous avez besoin de modifier votre question pour améliorer la partie du code? – Kalamarico

+0

votre question n'est pas claire – marvel308

+0

Le code de votre question ne montre aucun prototype en cours d'installation. –

Répondre

1

Non, ce n'est pas possible. Vous devez passer ObjectA ou objectA (pas sûr de ce que vous voulez) à la fonction.

Cela signifie que la fonction doit accepter cette valeur comme argument:

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

et vous auriez à l'appeler avec

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

Cependant, vous pouvez également remplacer func méthode de l'objet avec un autre qui passera toujours ObjectA à celui-ci:

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

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

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

et vous pouvez continuer à appeler la fonction comme

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

Vous n'êtes pas en train d'expliquer pourquoi vous voulez le faire, de sorte que ces solutions peuvent ou non être trop complexe ou approprié pour ce que vous essayez de faire.

+0

La deuxième solution que vous avez postée ici m'a orienté dans la bonne direction et j'ai réussi à le faire fonctionner. Vraiment apprécier l'aide, merci. – timdirusso

0

Votre code de question initiale n'a pas montré des prototypes étant mis en place. Si je comprends bien ce que vous demandez, vous essayez simplement de stocker une instance d'un objet en tant que propriété d'un autre. Voici ce que vous cherchez:

// 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);

Pour plus de détails sur la façon dont l'héritage prototypique en JavaScript fonctionne, voir this other post of mine qui explique que.

+0

Affecter à 'ObjectB.prototype.func' est la configuration du prototype, n'est-ce pas? Je suppose que l'OP a juste omis la déclaration de 'ObjectB'. –

+0

J'ai modifié le bloc de code. Dans ce cas, il y aurait une autre fonction qui prend B.attribute [0] .someProp en paramètre. A l'intérieur de cette même fonction, j'ai besoin d'accéder à B. J'ai seulement accès à someProp – timdirusso

+0

@FelixKling La publication originale ne contenait pas ce code. –