如何在this
中使用obj的sayHi()
我希望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)
之外,还有另一种方法可以做到这一点;
答案 0 :(得分:1)
您可以使用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))
答案 1 :(得分:1)
在sayHi()
函数内部,this
引用了sayHi
函数,但不是对象obj
。因此,在这种情况下,您可以使用this
.call()
var obj = {
fullName: "Harry Potter",
person: {
sayHi: function() {
return "This person's name is " + this.fullName
}
}
}
console.log(obj.person.sayHi.call(obj))
答案 2 :(得分:0)
不,没有。 obj
在其person
属性中包含对该对象的引用,但是该对象不知道其所在位置,也可以在多个位置对其进行引用。
您可以创建从person
到obj
的引用:
obj.person.parent = obj;
然后您可以以this.parent
的身份访问它。
答案 3 :(得分:0)
您不需要它,但我认为在这种情况下使用类更合适。
class Person{
constructor(fullName){
this.fullName=fullName;
}
sayHi(){
return "This person's name is " + this.fullName
}
};
HP = new Person("Harry Potter");
HP.sayHi()
“这个人的名字叫哈利·波特”