7

IE9 で開発者ツールを開くと、次のコードが機能します。

var log = Function.prototype.bind(console.log, console);

しかし、私がタイプすると

console.log(console, console.log);
var log = console.log.bind(console);

それから私はこれを取得します:

SCRIPT438: オブジェクトはプロパティまたはメソッド 'bind' をサポートしていません

なんで ?

それは IE の既知のバグですか、それとも通常の動作ですか?

それは他の機能に影響しますか(window.alertネイティブでも問題ありませんでした)?

4

2 に答える 2

9

関連する答えが言うように、それは単にIElogのオブジェクトの関数がからconsole継承しないためですFunction。これはホストオブジェクトであり、IEが適切と見なすルールを使用します。

しかし、それは関数のようなものです。そのため、配列のようなオブジェクトで作品を使用するのFunction.prototype.bindと同じように、作品を使用します。Array.prototype.forEach(ヒント:NodeListsとHTMLCollections。)

consoleオブジェクトについて説明している仕様がないため、それ自体はバグではありません。DOMの生活水準はそれについても言及していません。したがって、各ブラウザはこのオブジェクトを希望どおりに実装します。

そして、それはwindow.alert関数が同じ問題にさらされていることを意味します。幸運なことに、ブラウザ間で非常にうまく機能します。

それがIEです。それに対処します。IE9はIE8よりもはるかに優れていますが、それでも他の最新のブラウザーよりもはるかに劣っています。

于 2013-01-09T10:55:27.687 に答える
5

console は DOM の拡張であり、ECMAScript の一部ではありません。ホスト オブジェクトであるため、「オブジェクト」から継承する必要はありません。IE (9 & 8) では、コンソールは開発者ツールバーが開いているときにのみ表示されます。

var log = Function.prototype.bind.call(console.log, console); 
log(60+90);//150
于 2013-01-09T10:59:11.957 に答える