关心我正在学习的东西。我在JavaScript中学习这个

时间:2018-04-06 08:45:41

标签: javascript object this

我正在使用codecademy进行训练,但是我注意到预期的结果与完成音符建议的结果不同,即使我得到了通过标记。

说明

  

1。   这是使对象更灵活的好方法。在person对象下,编写另一个名为friend的变量,并将其设置为等于一个名为name的键的对象。 name的值应该是你朋友的名字。

     

您可以创建另一个对象文字:

let friend = {
    name: 'name here'
};
     

2。   在好友对象下,将friend.sayHello设置为person.sayHello

friend.sayHello = person.sayHello;
     

这会将名为sayHello的密钥添加到friend对象,并将其设置为person.sayHello内的方法。 person.sayHello方法使用this关键字。当朋友对象调用它时会是什么?

     

3。   在main.js的底部,使用console.log()打印调用friend.sayHello()的输出并注意控制台中的输出。

     

它记录了你朋友的名字而不是你的名字,因为这意味着改变了朋友对象,其名称密钥不同。

我的代码

let day = 'Wednesday';
let alarm;
let person = {
  name: 'William',
  age: 29,
  weekendAlarm: 'No alarms needed',
  weekAlarm: 'Alarm set to 7AM',
  sayHello: () => {
    return 'Hello, my name is ${this.William}';
  },
  sayGoodbye(){
    return 'Goodbye!'
  }
};
//Friend
let friend = {
  name: 'Preston'
};
//changing functions
friend.sayHello = person.sayHello;
if (day === 'Saturday' || day === 'Sunday') {
  alarm = 'weekendAlarm';}
else {
  alarm = 'weekAlarm';
}
console.log(person['name']);
console.log(person['age']);
console.log(person[alarm]);
person.hobbies = ['Pimping', 'Poon Slaying'];
person.hobbies = 'slayin hoes';
console.log(person['hobbies']);
console.log(person.sayHello());
//logging friend to console.log
console.log(friend.sayHello());

我的问题:

说明书建议最后的“你好,我的名字是......” 应该是“你好,我的名字是普雷斯顿。”

我的代码不这样做。我做错什么了吗?或者如果学习机器在标准方面不是最新的,我是否需要将其报告为错误?

您在这篇文章中所做的贡献可能不仅仅是帮助我。

2 个答案:

答案 0 :(得分:0)

您的代码“正常工作”的原因有三个:

  • 您使用箭头功能来定义sayHello:使用this的方式不同。在您的情况下,它将是未定义的(或非严格模式下的全局对象)。您需要使用function关键字来定义它(或ES6 shorthand syntax - 请参阅下文)。

  • 模板文字(带${ })需要反引号作为分隔符,而不是正常引号。正如你现在所做的那样,只需将${ }作为文字文本。

  • this.William引用不存在的属性,它应该是this.name

更正的相关部分:

let person = {
    name: 'William',
    sayHello() {
        return `Hello, my name is ${this.name}`;
    }
};
// Friend
let friend = {
    name: 'Preston'
};
// Assigning functions
friend.sayHello = person.sayHello;

// Logging friend to console.log
console.log(friend.sayHello());

答案 1 :(得分:0)

您的代码存在一些问题。

1,箭头功能没有"这个"

sayHello: () => {
  return 'Hello, my name is ${this.William}';
},

您必须使用与定义sayGoodbye的方式相同的简短语法,或使用传统语法function(){...}

2,模板文字语法错误

不是',而是'`'

3,变量名称错误:

return 'Hello, my name is ${this.William}';

正确的是this.name

所以,正确的版本是:

let person = {
  name: 'William',
  age: 29,
  ...
  sayHello() {
    return `Hello, my name is ${this.name}`;
  },
  ...
};