遭遇する問題は、まず第一に、js オブジェクトのカプセル化です。js にはクラス メカニズムが用意されていないため、すべての関数は関数クラスのインスタンス化されたオブジェクトになります。ただし、この固有のクラスに依存して、新しいクラスの定義をシミュレートできます。
最初に思い浮かぶのは、関数を直接使用して完全に定義されたクラスを生成することです。
function myClass(arg,...)
{
this.attributeName;
this.functionName = function(){};
しかし、これには問題があり、新しい myClass インスタンスを作成するたびに、内部関数がスペースを再度開き、functionName への参照を返します。しかし、これは私たちが想像していたクラスと矛盾しており、理論的にはクラスの機能を共有する必要があります。
より合理的な方法は、クラスの外で関数を定義し、クラス内で関数ポインタを functionName に割り当てることです。もう 1 つは、クラスの外で myClass.prototype.functionName = function(){} を使用することです。どちらも良い選択であり、2 番目の方がクラス定義に近いと言えます。
次に、var newObj = new myClass(); で完了です。
js について (2) 名前のない関数
名前のない関数の機能の 1 つは、主に定義のために新しい関数オブジェクトへの参照を生成することです。
もう 1 つの用途は、パラメーターを含めることができない js の一部のコールバック関数です。
わかりやすい例は setInterval で、特にコールバック関数にパラメータを追加する場合に、多くの人が頭を悩ませる関数だと思います。
そして最も厄介なことは、DHTML が w3c によって指定された標準ではないため、ブラウザごとに異なる setInterval パラメータ テーブルが与えられることです。 。 。
私がテストした 2 つのブラウザ (IE コア、Webkit コア) については、
IE: setInvterval(function, msec [,lang]);
chrome:setInterval(function, msec [, pram1, pram2, . ...]);
言い換えると、Chrome では関数にパラメーターを追加でき、パラメーターのリストは最後にあります。ただし、IE の最後のパラメータは、使用されるスクリプト言語の種類を示します。これは、IE は js に加えて、vbs などの他のスクリプト言語もサポートしているためです。
互換性の問題を解決するには、名前のない関数を使用する必要があります。 。 。
function test(yourArg)
{
var arg = yourArg;
setInterval(function(){callback(arg)},
}