我正在学习javascript。我用过这个'如下javascript
let person = {
name: 'Krishna',
age: 35,
sayHello() {
return 'Hello, my name is ' + this.name;
},
sayHi: () => `Hi ${this.name}`
};
console.log(person.sayHello());
console.log(person.sayHi());
sayHello()函数正确地得到了这个'作为人物对象。但是在简写函数sayHi()中,这是指全局窗口对象。在这里,我用person对象调用sayHi()。但不确定为什么这不会被引用到window对象。任何人都可以解释一下为什么sayHi()中的这个没有用person对象初始化?
答案 0 :(得分:1)
箭头函数词法绑定它们的上下文,所以这实际上是指 原始背景。
{
sayHi: () => // in context,
sayHello() {
// needs this to be in context
}
}
答案 1 :(得分:1)
当您使用sayHi: () => ...
时,您将this
绑定到全局上下文,而不是person
,因此您在作用域上没有name
属性。 This reading might help you.
答案 2 :(得分:1)
this
指向与分配箭头函数之前相同的对象(window
)。
如果您确实想要访问箭头功能中的person
对象,则必须通过对象名称(person
)直接执行此操作:
let person = {
name: 'Krishna',
age: 35,
sayHello() {
return 'Hello, my name is ' + this.name;
},
sayHi: () => `Hi ${person.name}`
};
console.log(person.sayHello());
console.log(person.sayHi());

答案 3 :(得分:1)
定义sayHello()
时,您将保留this
关键字未绑定,以便在函数调用person.sayHello()
中进行分配。 this
指的是调用中点的剩余部分,即person
。
在sayHi()
中,您在定义this
时绑定sayHi
关键字。由于上下文不是函数调用而是对象定义,因此this
的值未知,默认为window
对象。以这种方式绑定后,无法重新分配。当您运行person.sayHi()
时,this
会引用window
而不是person
。< / p>
答案 4 :(得分:-1)
在sayHello
中,您将返回结果字符串(在对象的上下文中计算(具有this
)。
在sayHi
中,您将向console.log返回一个函数,然后在不再定义this
的情况下调用它,因为您已脱离上下文。