2011-02-05 17 views
0

プロトタイプ関数を別のjavascriptファイルから呼び出そうとしていますが、動作しないようです。オブジェクトを作成せずにjavascriptでプロトタイプ関数を呼び出す

BuddyList.js:

function BuddyList(){ .. } 

BuddyList.prototype = { 
    addBuddy : function(buddyName){...} 
} 

UserOptions.js:

function UserOptions(){ 
.... 
BuddyList.addBuddy(username); 
} 

私はBuddyListはあなたがする必要はありませんaddBuddy

答えて

1

というメソッドを持っていないというエラーを取得します.prototypeメソッドを使用します。 JSですべてが対象ですので、あなたは、単に新しい機能をBuddyListを拡張することができます。

function BuddyList(){ 
    // do whatever 
} 

BuddyList.addBuddy = function(username){ 
     // do whatever 
} 
0

.addBuddyBuddyListコンストラクタから構成されているオブジェクト上で定義されています。

あなたがしようとしているようなオブジェクトのメソッドを呼び出すことはできません。

あなたが「静的」関数と、それを作成することもできます

aswell

BuddyList.prototype.addBuddy = function(buddyName) { 
    BuddyList.addBuddy.apply(this, arguments) 
} 

あなたはへの参照をチェックする必要があります。次に、プロトタイプからそれを呼び出すことができますBuddyList.addBuddy = function(buddyName) { ... }

しかし、addBuddyの中のBuddyListオブジェクトが機能します。

BuddyListはオブジェクトコンストラクタです。コンストラクタでaddBuddyメソッドを呼び出すことは意味がありません。私はあなたがから継承されたオブジェクトを使用してコンストラクタを上書きします

BuddyList = new BuddyList;

のために見てみたいことがあり、その後にのみ、これまで1 BuddyListがあるかどうあなたはactaully理論的にはこの

buddyList = new BuddyList; 
buddyList.append(someBuddy); 

をしたいと思いますコンストラクタ。

次のようにして、常にプロトタイプによるオブジェクトせずに直接addBuddyメソッドを呼び出すことができます。

BuddyList.prototype.addBudy.call(this, someBuddy)

それは本当にあなたがやろうとするものに依存します。

関連する問題