2017-06-29 74 views
4

让说我有一个对象:从大孩子引用对象?

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方法将参照人的对象,但“这”在数量的方法,不会参考人物对象将参考数字函数..,我可以从数字函数引用人物体访问getFirstName方法,这将解决问题,但...

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

+5

不,没有。这些对象在“向上”方向之间没有持续的关系。您可以创建一个函数来构造一个“地址”对象,使其具有“人员”引用。 – Pointy

+1

@JozefDúc,这将无法正常工作。 – Pointy

回答

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/

如果你正在寻找访问盛大母公司保留关键字,有没有这样的事情。你需要调整你的代码才能做到。

+1

谢谢..有很多种方式,但是对象和孙子之间没有这种关系.. –

0

您可以使用它像这样

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


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

是的,我知道,这将解决我的问题,但问题是......有没有办法从数字方法引用person对象?不使用人员变量...是否有一些特殊的关键字,如“这个”,访问人的方法? –

+0

您可以直接从您的号码功能返回“return person.firstName;”; var person = { 姓氏:“Renzo”, getFirstName:function(){ return this.firstName; }, address:{ number:function(){ return person.firstName; } } }; –

+0

是的,这就是我所做的并解决了这个问题..但是有一些特殊的变量吗?像“这个”,所以我不必使用人变量.. –

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

另一个你可以这样做的方式是在通话期间:

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

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

是的,这将肯定会设置这个=人,并会工作....所以我想没有人对象的特殊关键字.. –