You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

60 lines
3.0 KiB

<h1 id="functionobjects">Function objects</h1>
<h2>Property summary</h2>
<p>Duktape Function objects add a few properties to standard Ecmascript
properties. The table below summarizes properties assigned to newly
created function instances (properties can of course be added or removed
afterwards):</p>
<table>
<thead>
<tr><th>Property name</th><th>Compatibility</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td class="propname">length</td><td>standard</td><td>Function argument count (if relevant). Present for all Function objects, including bound functions.</td></tr>
<tr><td class="propname">prototype</td><td>standard</td><td>Prototype used for new objects when called as a constructor. Present for most constructable Function objects, not copied to bound functions.</td></tr>
<tr><td class="propname">caller</td><td>standard</td><td>Accessor which throws an error. Present for strict functions and bound functions. Not copied to bound functions. (If <code>DUK_OPT_FUNC_NONSTD_CALLER_PROPERTY</code> is given, non-strict functions will get a non-standard <code>caller</code> property.)</td></tr>
<tr><td class="propname">arguments</td><td>standard</td><td>Accessor which throws an error. Present for strict functions and bound functions. Not copied to bound functions.</td></tr>
<tr><td class="propname">name</td><td>Duktape</td><td>Function name, see below. Copied to bound function from target function.</td></tr>
<tr><td class="propname">fileName</td><td>Duktape</td><td>Filename or context where function was declared (same name as in error tracebacks). Copied to bound function from target function. </td></tr>
<tr><td class="propname">callee</td><td>n/a</td><td>Never assigned by default (listed here to clarify relationship to "caller" property).</td></tr>
</tbody>
</table>
<p>The <code>name</code> property is assigned to all functions and is also
the name used in tracebacks. It is assigned as follows:</p>
<pre class="ecmascript-code">
function funcDecl() {
/* Function declaration: 'name' is declaration name, here 'funcDecl'. */
}
var foo = function namedFunc() {
/* Named function expression: 'name' is the name used in expression,
* here 'namedFunc' (not 'foo').
*/
}
var bar = function () {
/* Anonymous function expression: 'name' is the empty string. */
}
</pre>
<p>User-created Duktape/C functions (<code>duk_push_c_function()</code>) have
a different set of properties to reduce Function object memory footprint:</p>
<table>
<thead>
<tr><th>Property name</th><th>Compatibility</th><th>Description</th></tr>
</thead>
<tbody>
<tr><td class="propname">length</td><td>standard</td><td>
Function argument count, matches argument to <code>duk_push_c_function()</code>, 0 for varargs.
Non-writable and non-configurable.</td></tr>
</tbody>
</table>
<p>Note in particular that the standard <code>prototype</code>, <code>caller</code>,
and <code>arguments</code> properties are missing by default. This is not strictly
compliant but is important to reduce function footprint. User code can of course
assign these but is not required to do so.</p>