JavaScript 反转名称的函数无法正常工作(来自 Learning JavaScript - O'Reilly 的示例)

JavaScript Function That Reverses Name Not Working Correctly (example from Learning JavaScript - O'Reilly)

我正在通过 Ethan Brown 的 "Learning JavaScript" 书学习一些 JavaScript,我偶然发现了一个未按预期执行的示例,我似乎无法弄清楚是什么错误是。我敢肯定这是显而易见的事情,我只是在学习这些东西的第 2 天,但这令人沮丧!

代码所在的部分着重于使用 this 关键字,此示例应该显示在嵌套函数中使用 this 的正确方法。

这是代码(摘自书中,但我用的是我的名字而不是 "Julie"!):

注意本书关注的是 ES6,而不是 ES5

const o = {
   name: "Daniel",
   greetBackwards: function() {
      const self = this;
      function getReversedName() {
         let nameBackwards = "";
         for (let i = self.length - 1; i >= 0; i--) {
            nameBackwards += self.name[i];
         }
         return nameBackwards;
      }
      return `${getReversedName()} si eman ym , olleH`;
   },
};

预期输出:

o.greetBackwards();

"leinaD si eman ym , olleH"

实际输出:

o.greetBackwards();

" si eman ym , olleH"

这个:

for (let i = self.length - 1; i >= 0; i--) {

应该是:

for (let i = self.name.length - 1; i >= 0; i--) {

因为self引用对象o。如果你想要名字,它必须是 self.name.

编辑:您可以通过以下方式实现整个getReversedName功能:

return [...self.name].reverse().join(''); // ES6 spread operator