2017-06-29 10 views
4

Lassen Sie sagen, ein Ich habe ein Objekt:Verweis auf Objekt von Grand Kind?

var person= { 
 
     firstName:"Renzo", 
 
     getFirstName:function(){ 
 
     console.log(this);// is the person object 
 
     return this.firstName; 
 
     }, 
 
     address:{ 
 
     number:function(){ 
 
      console.log(this);// is the number function 
 
      //return person.getFirstName(); // it is working 
 
      return this.firstName;// not working   
 
     } 
 
     }  
 
    }; 
 
    
 
console.log(person.getFirstName()); 
 
console.log(person.address.number());

Ich weiß, dass „dies“ in der getFirstName Methode auf die Person-Objekt verweisen, aber „das“ in der Methodennummer wird nicht Verweis auf das Objekt Person wird auf die Nummer Funktion verweisen .., kann ich auf die Methode getFirstName von Nummer Funktion Referenzierung auf die Person Objekt, das wird das Problem lösen, aber ...

Frage: Gibt es eine Möglichkeit, das Personenobjekt aus der Zahlenmethode zu referenzieren? ohne die person variable zu verwenden ... gibt es ein spezielles Keyword wie "this", um auf die Person-Methode zuzugreifen?

+5

Nein, gibt es nicht. Es gibt keine beständige Beziehung zwischen diesen Objekten in einer "Aufwärts" -Richtung. Sie könnten eine Funktion erstellen, um ein "Adress" -Objekt so zu konstruieren, dass es eine "Personen" -Referenz hat. – Pointy

+1

@ JozefDúc das wird nicht funktionieren. – Pointy

Antwort

1

Sie können ES6-Klassen und Pfeilfunktionen verwenden, um dies zu erreichen.

class Person { 
    constructor() { 
     this.firstName = "Renzo"; 
     this.address = { 
      getNumber:() => this.firstName 
     } 
    } 

    getFirstName() { 
    return this.firstName; 
    } 
} 

var person = new Person(); 
console.log(person.address.getNumber()); 

Hier ist eine Arbeits Geige - https://jsfiddle.net/sgsvenkatesh/qtg1s2f2/1/

Wenn Sie ein reserviertes Schlüsselwort suchen den großen Elternteil für den Zugriff, gibt es keine solche Sache. Sie müssen Ihren Code optimieren, um es tun zu können.

+1

danke .. es gibt Unmengen von Möglichkeiten, aber ja, es gibt keine solche Beziehung zwischen Objekt und Enkelkind .. –

0

Sie können es verwenden, wie diese

 var person= { 
     firstName:"Renzo", 
     getFirstName:function(){ 
     return this.firstName; 
     }, 
     address:{ 
     number:function(){ 
      return person.firstName; 
     } 
     }  
    }; 


console.log(person.address.number()); 
+0

Ja, ich weiß, das wird mein Problem lösen, aber die Frage war ... Gibt es eine Möglichkeit, das Personenobjekt von der Zahlenmethode zu referenzieren? ohne die person variable zu verwenden ... gibt es ein spezielles Keyword wie "this", um auf die Person-Methode zuzugreifen? –

+0

Sie können "return person.firstName;" direkt von Ihrer Nummernfunktion zurückgeben; var person = { vorName: "Renzo", getFirstName: function() { return this.firstName; }, Adresse: { Nummer: function() { return person.firstName; } } }; –

+0

Ja das habe ich gemacht und das Problem gelöst ... aber gibt es da noch eine spezielle Variable ??? wie "das", also muss ich die Personenvariable nicht benutzen. –

1

Sie die Adresse konstruieren könnte, so dass sie den Zugang zu seinem übergeordneten Objekt hat:

function Person(n){ 
this.firstName=n; 
this.address=new Adress(this); 
} 
Person.prototype= { 
    firstName:"Renzo", 
    getFirstName:function(){ 
    console.log(this);// is the person object 
    return this.firstName; 
    } 
}; 

function Address(p){ 
this.parent=p; 
} 
Address.prototype={ 
    number:function(){ 
     console.log(this);// is the number 
     console.log(this.parent);//the parent 
     return this.parent.getFirstName(); // it is working  
    } 
}; 

Usecase:

console.log((new Person("Me")).address.number()); 
2

Another So können Sie dies während des Anrufs selbst tun:

var person = { 
    firstName: 'Renzo', 
    getFirstName() { 
    return this.firstName; 
    }, 
    address: { 
    number: function() { 
     return this.firstName; 
    } 
    } 
} 

// then call it 
person.address.number.call(person); // 'Renzo' 
+0

Ja, das wird definitiv = = Person, und wird arbeiten .... so denke ich, es gibt kein spezielles Schlüsselwort für die Person Objekt .. –

Verwandte Themen