私は JavaScript をしっかりと理解しようとしていますが、大きな問題に出くわしています。私は C 言語での作業に慣れていますが、JavaScript のプロトタイプ機能を処理することと、実行順序に関係する関数がいつ宣言されるかという障壁の 1 つを見つけています。
たとえば、次のコードを見てください。
var construct = new Constructor(); //I can do this even if its above the declaration of the object.
construct.MyPrivilagedFunction(); //Can do this here too, even though it's above the function declaration.
construct.MyPublicFunction(); //Can't do this because it is above the function declaration.
function Constructor() {
//Private member
var m_Ding = "Ding!";
//Accessible publicly and has access to private member.
this.MyPrivilagedFunction = function() {
console.log(m_Ding);
}
}
Constuctor.prototype.MyPublicFunction = function() {
//Doesn't have access to private members. This doesn't work.
console.log(m_Ding);
}
関数のコピーがオブジェクトのすべてのインスタンスに保存されるのではなく、代わりにすべてのインスタンスが同じ関数を参照しているため、プロトタイピングによりパフォーマンスが向上することを理解しています (そして、新しいインスタンスはそれぞれまったく新しいオブジェクト型と見なすことができると思いますか?) . ただし、プロトタイピングでは、関数を定義する前に使用することはできません。さらに、プロトタイプ化された関数は、オブジェクトのプライベート メンバーにアクセスできません。
2 つのオブジェクトが互いの関数を使用する必要があるプロジェクトに取り組んでいるため、これは本当に問題です。1 つのオブジェクトをコードの前に配置すると、2 番目のオブジェクトにアクセスできなくなります。これは、プロトタイプ化された関数が実行順序 (上から下) に従うためです。
補足: オブジェクトはおそらくオブジェクト リテラル (object={property:value} など) である必要があることも認識していますが、スコープをしっかりと把握し、それに対処するためのプロトタイプを作成しようとしています。今。