2008-05-09

NN4とFirefox拡張機能のFunction#constructorプロパティ

少しマニアックなネタですが、JavaScriptでFunctionオブジェクトを生成する方法は大きく二種類あります。一つはFunctionコンストラクタを使う方法で、もう一つはインラインで関数を定義する方法です。
//Functionコンストラクタ
Function("alert('aiueo');");

//インライン定義
function(){
alert("aiueo");
}

この二つの方法でそれぞれ生成した関数のconstructorプロパティには、殆どのJavaScript実行環境でFunctionが設定されるのですが、NN4とFirefox拡張機能では違います。

NN4は関数内でインライン定義をするとconstructorプロパティにClosureが設定されます。またFirefox拡張機能(※)のインライン定義はFunctionなのですが、Functionとは違うFunctionになります。文字列表現は同じなのですが===演算子で一致しません(※)。

NN4もFirefox拡張機能もマイナーな環境ですので通常心配する必要はありませんが、もし不幸にも関わることがありましたら、この事を頭の隅に置いておくとはまらずに済む事があるかもしれません。

※overlay要素にscript要素を追加して「alert((function(){}).constructor === Function);」を実行すると簡単に確認できます。

0 件のコメント: