プロトタイピングを使用してJavascriptの「クラス」を作成しています。1番目と2番目のブロックが機能せず、3番目のブロックが機能する理由がわかりません。最初の/2番目のブロックについては、「オブジェクト#にはメソッド'validate'がありません」というメッセージが表示されます。なぜそれを行うのですか、そしてブロック3は正しい方法ですか?
-編集 私はこれをChrome/FFでテストしました
--Edit2次のコマンド でテストプロトタイプを呼び出す場合:var test = new Test();
そして、ログインプロトタイプでテスト変数を呼び出します。
ブロック1
機能テスト(){ this.init(); } Test.prototype.init = function(){ $( "。login")。click(this.login); }; Test.prototype.login = function(event){ event.preventDefault(); this.validate(); console.log( "login"); }; Test.prototype.validate = function(){ console.log( "validate"); }; new Test();
ブロック2
機能テスト(){ this.init(); } Test.prototype.init = function(){ $( "。login")。click(this.login); }; Test.prototype.login = function(event){ var self = this; event.preventDefault(); self.validate(); console.log( "login"); }; Test.prototype.validate = function(){ console.log( "validate"); }; new Test();
ブロック3
機能テスト(){ if(!(LoginControllerのこのインスタンス)){ 新しいLoginController();を返します。 } 自己=これ; this.init(); } Test.prototype.init = function(){ $( "。login")。click(this.login); }; Test.prototype.login = function(event){ event.preventDefault(); self.validate(); console.log( "login"); }; Test.prototype.validate = function(){ console.log( "validate"); }; new Test();