0

コードサンプルは次のとおりです。

var eventStack = {};
function addEvent (fn) {
  eventStack[fn] = fn;
}
function removeEvent (fn) {
  delete eventStack[fn];
}
addEvent(alert);
addEvent(console.log);
addEvent(addEvent);

自分で定義した関数は何でも機能しますが、console.log では機能しません。代わりに、_firebugignore に置き換えられます。

toString プロパティにはいくつかの魔法があると思います

EDIT hmng、コードをもう一度実行したところ、console.log で問題なく動作しました。以前はキーと値の両方が置き換えられていましたが、「_firebuignore」を購入したと思います。

4

2 に答える 2

1

はい、いくつかの魔法がありFunction.prototype.toStringます。これは実装に依存し、FunctionDeclaration -syntax-like である関数の表現を返すだけで済みます。もちろん、これらすべての環境組み込み関数 ( などconsole.log) に対して JS 関数を返すことはできません。

ただし、文字列表現で関数を識別することはまったく良い考えではないと思います。2 つの異なる関数が同じ文字列になることは簡単に起こります (例: 2 つの同一の関数式、異なるスコープ内の同一の関数宣言、またはクロージャー、組み込み関数 ( Array.prototype.toString.toString() == Function.prototype.toString.toString()))。

代わりに、配列を使用eventStackして関数の存在を確認してくださいindexOf()

于 2012-10-13T21:23:56.847 に答える
0

プロパティ名には文字列のみを使用できます。他の型は、必要に応じて文字列値に強制されます。プロパティを反復処理するとfor ... in、文字列が得られます。

于 2012-10-13T20:47:02.817 に答える