[英]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.