2

入力として文字列を取る .show() という組み込みメソッドを持つ Message というオブジェクトがあります。Message クラスで .show() を呼び出すと、ブラウザの順序付けられていないリスト (classname = chat) に、文字列入力を含む箇条書きのリスト項目が表示されます。

コンソールでは、 Message.show('string') はundefinedを返します。練習のために、.show() を削除したので、ビルド方法を学習できます。

コード:

 Message.prototype.show = function (text) {           
     $('.chat').append('<li>' + text + '</li>');
 }

ただし、未定義のプロパティ 'show' を設定できないという TypeError が表示されます。見返りに関数が期待されていることは理解していますが、これは Message クラスに以前のメソッドを与えることができないということですか? プロトタイプの使用またはリスト項目の追加で構文エラーがありますか? これを行うより良い方法はありますか?

私は立ち往生しています..どんな助けも大歓迎です。どうもありがとう!

4

2 に答える 2

4

function Message()メソッドを追加する前に定義する必要があります.show()

私が間違っていなければ、あなたが探しているのはこれです:

 // Define the function
 function Message() {

 }

 // Add prototype methods
 Message.prototype.show = function (text) {           
     $('.chat').append('<li>' + text + '</li>');
 }

 // Usage:
 var msg = new Message();
 msg.show("Hello there.");

このようにいくつかの余分なものを追加することもできます(テストされていません):

 function Message() {
      this.chatWindow = $(".chat");
 }

 Message.prototype.render = function (text) {
      return $('<li>' + text + '</li>');
 }

 Message.prototype.show = function (text) {           
     this.chatWindow.append(this.render(text));
 }

 // Usage:
 var msg = new Message();
 msg.show("Hello there.");
于 2013-03-21T16:44:19.267 に答える
2

で何かを初期化する必要がMessageあり、そのメソッドに直接アクセスすることはできません。

例えば:

var message = new Message();
message.show('test');
于 2013-03-21T16:44:29.977 に答える