2011-10-19 7 views
1

は、私がここにリンクをいくつかのJSコードを持っているがJavaScriptの継承の不正行為

を削除

var r = new TempPopupForm("xxx"); 
r.create(); 

をsnipetエラーが

TypeError: this.init is not a function 
表示されます

このエラーは、このオブジェクトに実装されたinitメソッドがないことを示しています。

しかしこれは真実ではありません。下記のコードでわかるように、initメソッドが宣言されています。

TempPopupForm.prototype = new PopupForm(); 
TempPopupForm.prototype.constructor = TempPopupForm; 
TempPopupForm.superclass = PopupForm.prototype; 

function TempPopupForm(name) { 
    this.init(name); 
} 
TempPopupForm.prototype.init = function(name) { 
    TempPopupForm.superclass.init.call(this, name); 
}; 

私はそれが何であるか把握できません。

BTW一部のサードパーティ製の依存関係があります。

EDIT

私はこの記事を以下、私が持っているようのfuncsを注文されました。注文は実際には他のクラスでは動作しますが、このクラスでは動作しません。 http://www.kevlindev.com/tutorials/javascript/inheritance/inheritance10.htm

+0

...そう –

+0

-

これを試してみてくださいhttp://jsfiddle.net/)代わりに?個人的には、他のユーザーがリンクをたどったり問題を助けたりするのを嫌に思っていて、ハッカーの標的としてテストマシンを公開/選別しているようです。 – user49126

+0

:-)私のためにドメインあなたは[jsFiddle]を使用したくない、私のテストマシンをだ –

答えて

0

関数とインスタンスを並べ替える必要があります。あなたのコンストラクタはinitに独自のプロトタイプのメソッドを使用しているので、オブジェクトをインスタンス化するブロックの上にある必要があります。 JavaScriptはトップレベルの機能を持ちます。 (生のIPアドレスのハイパーリンクが不審に感じていること

function TempPopupForm(name) { 
    this.init(name); 
} 

TempPopupForm.prototype = new PopupForm(); 
TempPopupForm.prototype.constructor = TempPopupForm; 
TempPopupForm.superclass = PopupForm.prototype; 

TempPopupForm.prototype.init = function(name) { 
    TempPopupForm.superclass.init.call(this, name); 
}; 

var r = new TempPopupForm("xxx"); 
r.create(); 
+0

提案したように並べ替えましたが、TempPopupForm.superclassは定義されていません。 – user49126

+0

私は編集を行いました...それがうまくいくかどうかは分かりません。とにかくそれをやっているのはなぜですか?確かに簡単な方法があります – mattacular

+0

今度はもう一度言う:this.initは関数ではありません。私はこの記事に従っていました。http://www.kevlindev.com/tutorials/javascript/inheritance/inheritance10.htm – user49126