访问外部对象的"this"(JavaScript)



如何在sayHi()中使用 obj 的this

我想在 SayHi 中this引用 obj 中的this我应该向 sayHi 添加哪些更改,以便它打印哈利波特而不是未定义

let obj = {
fullName: "Harry Potter",
person: {
sayHi: function(){
return "This person's name is " + this.fullName
}
}
}

除了这种obj.person.sayHi.call(obj)obj.person.sayHi.apply(obj)之外,还有没有其他方法可以做到这一点;

您可以使用apply()

var obj = {
fullName: "Harry Potter",
person: {
sayHi: function(){
return "This person's name is " + this.fullName
}
}
}
console.log(obj.person.sayHi.apply({fullName: 'John'}))
console.log(obj.person.sayHi.apply(obj))

在函数sayHi()this引用sayHi函数,而不是对象obj。因此,在这种情况下,您可以使用.call()绑定引用this

var obj = {
fullName: "Harry Potter",
person: {
sayHi: function() {
return "This person's name is " + this.fullName
}
}
}
console.log(obj.person.sayHi.call(obj))

不,没有。obj在其person属性中包含对对象的引用,但是该对象不知道它在哪里,也可以在多个位置引用它。

您可以创建从personobj的引用:

obj.person.parent = obj;

然后,您可以将其作为this.parent.

你不需要它,但我认为在这种情况下使用类更合适。

class Person{
constructor(fullName){
this.fullName=fullName;
}
sayHi(){
return "This person's name is " + this.fullName
}
};
HP = new Person("Harry Potter");
HP.sayHi()

"这个人叫哈利波特">

最新更新