JavaScript でアプリケーションを作成しようとしています。JavaScript は、Web ページのスクリプト作成に何年も使用してきましたが、スコープとオブジェクト指向についての理解がやや不足していることに気付きました。私のバックグラウンドは主に C# や Ruby などのオブジェクト指向言語であるため、JavaScript の奇妙な疑似オブジェクト指向の機能的アプローチは、私を際限なく混乱させます。
私が問題を抱えているthis
のは、クラス内のすべての参照で常にそれが必要な理由です。JS で役に立つ多くのことを書くために、途方もない量のタイピングが必要になるように思われます。
function MyClass()
{
var a=1;
this.b = 2;
this.internalMethod= function()
{
console.log("a is: "+a); // returns "a is: 1"
// console.log("b is: "+b); - this fails because b is undefined
console.log("this.a is: "+this.a); // returns "this.a is: undefined" but doesn't crash.
console.log("this.b is: "+this.b); // returns "this.b is: 2"
}
}
MyClass.prototype.externalMethod = function()
{
// console.log("a is: "+a); - fails
// console.log("b is: "+b); - fails
console.log("this.a is: "+this.a); // "this.a is: undefined"
console.log("this.b is: "+this.b); // "this.b is: 2"
}
var m = new MyClass();
m.internalMethod();
m.externalMethod();
このことから私が理解していることは、このclass.prototype
アプローチで新しいパブリック メソッドを追加する場合、 で定義されたプロパティにしかアクセスできないということthis
です。
クラス定義関数で内部メソッドを作成するvar
と、クラス自体の任意の値にアクセスできthis.property
、this
.
これは正しいです?prototype
メソッドを使用する関数のプロパティにアクセスするには、常に明示的なオブジェクト参照を含める必要がありますか? class.prototype
もしそうなら、関数を追加するためにパターンを使用するのではなく、親クラス関数内ですべての関数を宣言する必要がありますか?
本質的に、オブジェクト指向 Javascript を作成する際に変数スコープを管理するための標準的なアプローチを探しています。このトピックに関する記事のほとんどは、オブジェクト指向の基本的な紹介であるか、この分野について詳しく説明しているように見えます。私のクラスの多くはかなりデータ集約的であり、フォームで呼び出しを行わなければならないことはthis.myMethod( this.firstArray, this.secondArray, this.thirdArray, this.fourthArray )
長いカットのように見え、コードの可読性を妨げます.
(var that=this
呼び出し元のスコープの問題を回避するためのトリックは知っていますが、私の質問に実際には関係ないことがわかっている限り、例を台無しにしたくありませんでした。)