On Mon, Nov 3, 2008 at 7:08 PM, Brendan Eich &lt;<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>&gt; wrote:<br>&gt;<br>&gt; See also 11.4.3 The typeof Operator (second to last table row).<br><br>For reference, the last three rows of that table are<br>
<br><span style="font-family: courier new,monospace;">Object (native and doesn't implement [[Call]])        &quot;object&quot;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Object (native and implements [[Call]])         &nbsp; &nbsp; &nbsp;&nbsp; &quot;function&quot;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Object (host)         &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Implementation-dependent</span><br style="font-family: courier new,monospace;"><br>So it&#39;s pretty clear from the text you cite that typeof of a native object that implements [[Call]] must be &quot;function&quot;.<br>
<br>On Mon, Nov 3, 2008 at 8:14 PM, David-Sarah Hopwood <span dir="ltr">&lt;<a href="mailto:david.hopwood@industrial-designers.co.uk">david.hopwood@industrial-designers.co.uk</a>&gt;</span> wrote:<br>
<div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">&gt; There is evidence for this, because Mozilla&#39;s regexps used to report<br>

&gt; typeof-type &quot;function&quot; and so fell into logic wanting only a function,<br>
&gt; not a callable host object.<br>
<br>
</div>The resolution of that bug is clearly nonformant to ES3 section 11.4.3,<br>
as at least two commenters (&#39;Ish&#39; and Garrett Smith) pointed out.</blockquote><div><br>Can someone provide a link to this bug, or to that prior discussion of this bug? Thanks.<br></div></div><br>On FF3.0.3, a bit of testing reveals that RegExp instances are indeed callable as functions, which presumably means they have an internal [[Call]] property. And they are clearly native objects, not host objects. However, unlike Rhino or WebKit, of FF3.0.3 at least, typeof of a RegExp does return &quot;object&quot;. I don&#39;t see any way to rationalize this as conforming to the spec. Since WebKit conforms to the ES3 spec in this regard, it would seem that one can both follow this clause of the spec and not break the web.<br>
<br>On Mon, Nov 3, 2008 at 8:16 PM, Maciej Stachowiak <span dir="ltr">&lt;<a href="mailto:mjs@apple.com">mjs@apple.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">It&#39;s saying you can call anything that&#39;s callable a function, or perhaps even loosely defining a term &quot;function&quot;.<br>

</div>
<br>But this does not guarantee that typeof returns &quot;function&quot;, that
the internal [[Class]] property has the value &quot;Function&quot;, or that
Function.prototype is in the prototype chain, among other potentially
useful properties.<br>
</blockquote><br>If F is a callable native object, then the section of the spec Brendan cites (and which FF violates) does guarantee that |typeof F| be &quot;function&quot;. Whether we want to describe such objects as functions in prose about them is another matter. In descriptive prose, I prefer to describe as functions only native objects whose [[Class]] property is &quot;Function&quot;.<br>
<br>-- <br> &nbsp; &nbsp;Cheers,<br> &nbsp; &nbsp;--MarkM<br><br>