如何在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
属性中包含对对象的引用,但是该对象不知道它在哪里,也可以在多个位置引用它。
您可以创建从person
到obj
的引用:
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()
"这个人叫哈利波特">