あるクラスを IE で作成。NN4.73(以下NN) で確認した結果、意味不明のエラーが発生。苦戦30分。 そこだけ抜粋すると以下のようなプログラムである。
function MyClass( size ){
this.position = size/MyClass.size ;
}
MyClass.size = 5 ; // クラス変数 size
var object = new MyClass( 10 );
alert( object.position );
これを実行すると、アラートには 2 が表示されるはずですが、NN での結果は 1。
NN では何が違うのかというと、MyClassコンストラクタ関数内の MyClass.size
の値です。
IE(NS6)ではクラスメンバの 5 を参照するわけですが、NN はコンストラクタの第一引数 size の値を参照してしまいます(あー恐ろしや)。
これはNNの仕様ですが、このブラウザ間の解釈の違いにより見つけ難いエラーを発生させることになるので注意しましょう。
ところでこれとは関係ないですが(長いプロセスが・・・)、このミスによりちょっとしたことを思い付きました。
function f(){ alert(arguments.caller.callee.arguments[0]); } function g(a){ f(); } g(9);
これを実行するとアラートには 9 が表示されます。要は呼び出し元の引数の値を取り出すというものです。
理解しにくいかも知れないですが、頑張って理解して下さい(ただし、これをどう役立てるかは不明。笑)。
話を戻しますが、NNでは引数を参照します。 関数の実装が全然違うということが分かりましたが、これについては調べる必要がありそうです。