プロトタイピングを使用して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();