JavaScriptコードをクリーンアップしようとしているので、スパゲッティコードの記述をやめて、より全体的な構造にすることができます。簡単なフォームバリデーターを書いて自分のスキルをテストしたかったのです。しかし、私はすでに立ち往生しています。
これは私が現在持っているコードです:
(function($, window, undefined) {
var Form = function($el) {
this.$el = $el;
this.fields = {};
this.prototype.validate = function() {
this.getFields();
}
this.prototype.getFields = function() {
console.log("getting fields");
}
return {
validate: this.validate
}
};
window.Form = Form;
})(jQuery, window);
$(function() {
var form = new Form('#form-newsletter');
form.validate();
});
これについてのいくつかの質問。
Form変数を自己実行関数でラップし、3つのパラメーターを渡しました。jQuery、window、およびundefinedを使用して、常に未定義であることを確認します。私はうそをつくつもりはありません、これは私がそれをすることを学んだ方法です、そして私はなぜ私がこのようにそれをするのか100%確信していません。これは悪い習慣ですか、それとも私はこれをどうにかして改善できますか?次に、Form変数をウィンドウにアタッチして公開します。
var内で、Form
いくつかのプロパティを設定し(これは、どのように呼び出すのですか?)、いくつかのメソッドがあります。returnステートメントでvalidateメソッドのみを公開します。これで大丈夫ですか?
そして、行き詰まった部分。validate()
フォームを検証するタスクを持つ初期化関数のようになりたいです。Validateは、getFields関数を呼び出してフォームフィールドを解析し、それらをフィールドオブジェクトに配置する必要があります。しかし、私はそれを機能させることができないようです。this.getFields()
、、this.prototype.getFields()
またはを呼び出すと機能しませんForm.getFields
。これは、この関数のthis
内部がFormオブジェクトとは異なるためですか(ここでは正しい表現ですか?)。this.self = this
フォーム関数の先頭に次のようなものを配置する必要がありますか?
また、これらのメソッドをプロトタイプにアタッチしても大丈夫かどうか疑問に思っています。これをしない理由はありますか?
私は学ぼうとしています。私がJavaScriptについて読んだほとんどの本は、基本、Dog
つまりクラスから継承するクラスに焦点を当てていMammal
ます。しかし、私が知る限り、彼らはこのようなことで私を本当に助けてくれません。これらの概念をよりよく理解するのに役立つ本、チュートリアル、スクリーンキャストはありますか?
編集:
スクリプトを共通の名前空間にグループ化するとします。
var MyStuff = {};
MyStuff.Utilities = { // stuff };
MyStuff.Form = function() { // stuff };
ただし、これらを、、などの個別のファイルに入れたい場合は、どうすればよいmystuff-form.js
ですmystuff-utilities.js
か?名前空間varをどこで宣言しますvar MyStuff = {}
か?そして、それを行った後、フォームとユーティリティをそれに添付するだけですよね?MyStuff.js
それだけでファイルを作ることはほとんどできませvar MyStuff = {}; window.MyStuff = MyStuff
んね。