Niech powiedzmy obiekt:

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

Wiem, że "to" metodą GetFirstName odnosi się do obiektu osoby, ale "to" w metodzie liczby nie odniesienie się do obiektu osoby odniesienie do funkcji numerów., Mogę uzyskać dostęp do metody Numer Methode z funkcji numeru Odwołanie do obiektu osoby, która rozwiąże problem, ale ...

Pytanie: Czy jest sposób na odniesienie do obiektu osoby z metody numeru? Bez użycia zmiennej osoby ... Czy istnieje jakieś specjalne słowo kluczowe jak "to", aby uzyskać dostęp do metody osoby?

4
Renzo Calla 29 czerwiec 2017, 15:58

4 odpowiedzi

Najlepsza odpowiedź

Możesz użyć klas ES6 i funkcji strzałek, aby móc to osiągnąć.

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

  getFirstName() {
    return this.firstName;
  }
}

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

Oto działające skrzypce - https://jsfiddle.net/sgsvenkatesh/qtg1s2f2/1/9/a/a >.

Jeśli szukasz zarezerwowanego słowa kluczowego do uzyskiwania dostępu do Grand Rodzic, nie ma czegoś takiego. Musisz zmienić swój kod, aby móc to zrobić.

1
sgsvnk 29 czerwiec 2017, 13:30

Możesz tego używać w ten sposób

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


console.log(person.address.number()); 
0
Ashish Yadav 29 czerwiec 2017, 13:14

Możesz skonstruować adres, dzięki czemu ma dostęp do jego obiektu macierzystego:

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      
    }
 };

Przypadek użycia:

console.log((new Person("Me")).address.number());
1
Jonas Wilms 29 czerwiec 2017, 13:14

Innym sposobem, w jaki mógłbyś to zrobić podczas samego połączenia:

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

// then call it
person.address.number.call(person); // 'Renzo'
2
chazsolo 29 czerwiec 2017, 13:19