2
var foo = function () {};
foo.a = "an attribute";  // set attribute to prove foo is an object
console.log(foo)  // log shows: function () {};

関数 foo はオブジェクトだと思っていましたが、Chrome の console.log が"function () {}"検査可能なオブジェクトではなく表示されるのはなぜですか? 関数をログに記録するときに検査可能なオブジェクトを表示する方法はありますか?

4

3 に答える 3

7

を呼び出すconsole.log(foo)と、コンソールは正規化されていない表示を作成します (これは EcmaScript の一部ではありません)。ほとんどの場合 (基本的なオブジェクトではありません) toString、引数の関数を呼び出します (ただし、文字列への引用符の追加、色の設定、オブジェクトの参照の提供など、より多くの作業を行います)。

toString関数の関数は、単にコードを出力します。

すべてのプロパティを表示する場合は、次のようにします。

console.dir(foo);

または(少なくともChromeでは

console.log("%O", foo);

専用の機能を持つ他のオブジェクトでも同じ現象が見られtoStringます。

例えば ​​:

var a = new Number(3);
a.b = 4;
console.log(a); // logs just 3
console.dir(a); // lets you see b
于 2013-04-17T15:37:31.490 に答える
1

を使用console.dir()して、a

>>>>console.log(foo);
function()
>>>>console.dir(foo);
a            "an attribute"
prototype    Object { }
于 2013-04-17T15:38:51.090 に答える
0

ジストロイは正しい。function は、toString がコードを出力するオブジェクトです。

console.log(foo.a); 

トリックをするだろう

于 2013-04-17T15:39:38.437 に答える