为什么'这个'关键字在javascript中的对象的简写方法中不起作用?

时间:2018-03-20 18:10:02

标签: javascript

我正在学习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对象初始化?

5 个答案:

答案 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的情况下调用它,因为您已脱离上下文。