ここに作業フィドルがあります: JsFIDDLE
ほとんどの jQuery 開発者が理解していないことは次のとおりです: JavaScript のスコープ。
基本的に、 経由でプロパティにアクセスするthis
には、 にネストする必要がありObject.prototype
ます。
修正
オブジェクトのプロパティをインラインで定義すると、呼び出しthis
は引き続き正しいオブジェクトを指します。ただし、私が紹介したパターンは、あまり人気がありませんが、はるかにきちんとした優れたアプローチです。
これprototype
は、JavaScript による OOP の方法です。堅実な OOP スタイルの JS を探していて、モデルの適切な定義、コードの保守性の向上、およびコーディング スタイルの改善を求めている場合は、私が提供したパターンを使用してクラスを定義することをお勧めします。これにより、静的関数を明確に区別できるようになります。とクラス。これは、すべてがオブジェクトである JavaScript の自然な流れでもあります。
高レベルの JavaScript プログラミング (強力な Ajax アプリケーション、または何らかの理由でブラウザーがより高度な計算を実行する必要があるアプリケーション) では、以下のスタイルが常に優先されます。名前空間の下に配置された静的関数は、引き続き個別に定義されます。
var namespace = {};
namespace.firstStaticFunc = function() {/*do stuff etc;*/};
namespace.secondStaticFunc = function() { return !1; };
定義パターンを使用する唯一の理由は、列挙型とハッシュ マップです。例えば:
var typesOfChicken = {
RED: 'red',
BLUE: 'blue'
};
上記は、国際化やハードコードされた値の回避などに常に使用されます。また、JS ミニファイヤがより良い仕事をするのにも役立ちます。上記を考えると、次のように言えます。
console.log(typesOfChicken.RED);// will print red.
console.log("red");// wil still print red
しかし、赤を別のものに変更したい場合は、列挙型を使用して 1 つの変更を行うだけで済みます。typesOfChicken.RED
また、ミニファイアはab に置き換えることができます"RED"
が、常に「RED」になります。それは縮小不可能です。
var firstObject = function() { };
firstObject.prototype.myName = "Swapnesh Sinha";//this will not be nested as an instance property.
firstObject.prototype.sayHello = function() {
alert(this.myName);// will now correctly display Swapnesh Sinha
};
// to use your first object.
var instance = new firstObject();
instance.sayHello();
スコープを適切に利用するには、オブジェクト指向パターンであり、JS でクラスを定義するための正しいアプローチである、私が示したパターンを使用してください。
これで、JavaScript コードを整理する優れた方法が得られました。保守がかなり容易になり、スコープがより明確になり、最も重要なこととして、静的関数とクラスをすぐに区別できるようになりました。