前提・実現したいこと
現在、「Modern JavaScript for the impatient」という本の翻訳版を読んでいます。
その本の第4章の演習問題5問目のJavaScriptの問題がわからず詰まっています。
助言いただければと思い、質問を投稿させて頂きます。
分からない演習問題5問目
次の関数は、文字列greetメソッドを追加して「あいさつ」ができるようにする。
JavaScript
1function createGreetable (str) { 2 const result = new String(str) 3 result.greet = function(greeting) { return `${greeting}, ${this}` } 4 return result 5}
典型的な用例は、
JavaScript
1const g = createGreetable('World') 2console.log(g.greet('Hello'))
この関数には、1つ難点があって、あいさつができる文字列は、それぞれgreetメソッドの独自のコピーをもつことになる。createGreetableが、プロトタイプにgreetメソッドを含むオブジェクトを作成するように仕様。それでも、すべての文字列メソッドを呼び出せるようにする。
以上が問題になります。
考えたソースコード
JavaScript
1const greetPrototype = { 2 greet: function(greeting) { 3 let result = '' 4 for (const key in this) { 5 result += this[key] 6 } 7 return `${greeting}, ${result}!` 8 } 9} 10 11function createGreetable(str) { 12 const result = new String(str) 13 Object.setPrototypeOf(result, greetPrototype) 14 return result 15} 16 17const g = createGreetable('World') 18console.log(g.greet('Hello'))
上記のソースコードの出力結果
Hello, Worldfunction(greeting) { let result = '' for (const key in this) { result += this[key] } return `${greeting}, ${result}!` }!
試したこと
問題の意味がうまく理解できていないのもありますが、
まずは、greetPrototypeを作成し、greetメソッドを追加しました。
greetメソッドでは、thisを使ってStringオブジェクトの内容を表示したかったのですが、うまくできなかったためfor inを使ってresult変数に代入し表示しています。
その値を、Object.setPrototypeメソッドでプロトタイプに追加し、使えるように実装しました。
結果、Hello, Worldの表示後、greet: の次に書いたプロトタイプのgreetメソッドのソースコードが表示されてしまいました。
初歩的な問題だとは思いますが、よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
node: 12.18.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 01:36 編集