假设我有一个对象:
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方法?
答案 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());