7

実行すると:

window.toString.call("")

FF/CH では問題ありませんが、IE8 ではスクリプト エラーが発生します。window.toString.callIE8 では未定義であることが判明しました。

これを実行することもできます:

window.toString instanceof Function;
// false

alert(window.toString);
// function toString() {
//    [native code]
// }

それはなぜですか、それを解決する方法は? そして、そもそも jQuery がなぜ機能するのか疑問に思い始めました。

4

2 に答える 2

15

windowはホスト オブジェクトであり、ECMAScript 言語仕様 (第 3 版)では、ホスト オブジェクトをネイティブ オブジェクトから派生させる必要はありませんObject。IE (およびおそらく他の一部のブラウザー) では、ホスト オブジェクトはサポートされていないため、ネイティブのメソッドまたはプロパティをサポートしていません (ただし、ネイティブのメソッドまたはプロパティと同じ名前のメソッドまたはプロパティを持っている場合があります)。スクリプト)。

言語実装のデフォルトのネイティブtoStringメソッドを取得することだけが必要な場合は、 を使用する必要がありますObject.prototype.toString.call("")

于 2009-11-03T18:12:27.643 に答える
1

NickFitz は正しいです。あなたが見つけているホスト オブジェクトの toString メソッドは純粋にそうです。

アラート (ウィンドウ);

テキスト[オブジェクト]を取得します

あなたの例で使用されているjavascriptメソッド toString() が達成するのは、文字列から文字列を作成することだけなので、あなたがしようとしていることを行う正しい方法は次のとおりです。

var a =new String ("");

または単に

var b = "";

または、本当にばかになりたい場合。

var b = "".toString();
于 2009-11-03T18:27:55.757 に答える