2016-05-01 8 views
1

私はEthan Brownの「Learning JavaScript」ブックでJavaScriptを学習していますが、期待されていると私はエラーが何であるか把握していないようです。私はそれが何かを明らかにしていると確信しています、私は2日目にこのことを学んでいますが、これはイライラしています!名前を正しく戻さないJavaScript関数(JavaScriptの学習 - O'Reillyの例)

このセクションのコードは、thisキーワードを使用することに焦点を当てています。この例では、ネストされた機能でthisを使用する正しい方法を示しています。この本はES6に焦点を当てて

NOTE、ない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"

+0

サイドノート:あなたはと全体getReversedName機能を実装することができますJavaScriptの文字列は不変ですので、それが全体の文字列ごとにループを再割り当てとしての機能を反転した文字列は、次善です。 '.split( '')。reverse()。join( '')'を使う方が良いでしょう。 –

+0

"期待" ---あなたの期待は何に基づいていますか? – zerkms

+0

@ AlexanderO'Maraあなたの提案はコードよりも優れていますか? – zerkms

答えて

4

これ:

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

あるべき:selfとして

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

オブジェクトoを指します。名前が必要な場合は、self.nameにする必要があります。

編集は:

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

ああ、今日はあまりにも長い画面を見つめているそれが現れます!ありがとう、私は9分でこの答えを受け入れる、StackOverflowは私の前にそれを許可しません... –

+0

問題はありません!喜んでお手伝いします:) – timolawl

+0

イテレータ付きの後者のes2015ソリューションは、現在4バイト文字で正常に動作する唯一のものです。 – zerkms

関連する問題