繁体   English   中英

从大孩子参考对象?

[英]Reference to object from grand child?

假设我有一个对象:

 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方法中的“this”会引用person对象,但是number中的“this”将不会引用person对象引用的数字函数..,我可以从数字函数访问getFirstName方法引用person对象,这将解决问题,但......

问题:有没有办法从数字方法引用person对象? 没有使用person变量...是否有一些像“this”这样的特殊关键字,来访问person方法?

另一种方法是在呼叫期间:

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

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

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

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

用例:

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

您可以使用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/

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

你可以像这样使用它

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM