从大孩子参考对象?

时间:2017-06-29 12:58:12

标签: javascript

假设我有一个对象:



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




我知道"这个"在getFirstName方法中将引用person对象,但是" this"在number方法中不会引用person对象将引用数字函数..,我可以从引用到person对象的数字函数访问getFirstName方法,这将解决问题但是...

问题: 有没有办法从数字方法引用person对象?不使用person变量...是否有一些特殊的关键字,如"这个",来访问person方法?

4 个答案:

答案 0 :(得分:2)

另一种可以做到这一点的方法是在通话过程中:

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

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

答案 1 :(得分:1)

您可以构造地址,以便它可以访问其父对象:

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 :(得分:1)

您可以使用ES6类和箭头功能来实现此目的。

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

  getFirstName() {
    return this.firstName;
  }
}

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

这是一个工作小提琴 - https://jsfiddle.net/sgsvenkatesh/qtg1s2f2/1/

如果您正在寻找一个用于访问祖父母的保留关键字,则没有这样的事情。您需要调整代码才能执行此操作。

答案 3 :(得分:0)

您可以像这样使用

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


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