访问外部对象的“ this”(javascript)

时间:2019-09-16 11:22:12

标签: javascript

如何在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)之外,

还有另一种方法可以做到这一点;

4 个答案:

答案 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属性中包含对该对象的引用,但是该对象不知道其所在位置,也可以在多个位置对其进行引用。

您可以创建从personobj的引用:

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()

“这个人的名字叫哈利·波特”