How to Use Function "Constructors"
Site: | Saylor Academy |
Course: | PRDV402: Introduction to JavaScript II |
Book: | How to Use Function "Constructors" |
Printed by: | Guest user |
Date: | Wednesday, May 14, 2025, 2:04 AM |
Description
Functions can be created using a "function" statement or the Function()
constructor. Dynamic functions are created when defining functions with the "new" operator and Function() constructor. Constructors not only create new objects but also specify the behaviors and properties of those objects.
Function
The Function
object provides methods for functions. In JavaScript, every function is actually a Function
object.
Source: Mozilla, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Constructor
Function()
-
Creates a new
Function
object. Calling the constructor directly can create functions dynamically but suffers from security and similar (but far less significant) performance issues toeval()
. However, unlikeeval()
, theFunction
constructor creates functions that execute in the global scope only.
Instance properties
These properties are defined on Function.prototype
and shared by all Function
instances.
Function.prototype.arguments
Deprecated Non-standard-
Represents the arguments passed to this function. For strict, arrow, async, and generator functions, accessing the
arguments
property throws aTypeError
. Use thearguments
object inside function closures instead. Function.prototype.caller
Deprecated Non-standard-
Represents the function that invoked this function. For strict, arrow, async, and generator functions, accessing the
caller
property throws aTypeError
. Function.prototype.constructor
-
The constructor function that created the instance object. For
Function
instances, the initial value is theFunction
constructor.
These properties are own properties of each Function
instance.
displayName
Non-standard Optional-
The display name of the function.
length
-
Specifies the number of arguments expected by the function.
name
-
The name of the function.
prototype
-
Used when the function is used as a constructor with the
new
operator. It will become the new object's prototype.
Instance methods
Function.prototype.apply()
-
Calls a function with a given
this
value and optional arguments provided as an array (or an array-like object). Function.prototype.bind()
-
Creates a new function that, when called, has its
this
keyword set to a provided value, optionally with a given sequence of arguments preceding any provided when the new function is called. Function.prototype.call()
-
Calls a function with a given
this
value and optional arguments. Function.prototype.toString()
-
Returns a string representing the source code of the function. Overrides the
Object.prototype.toString
method. Function.prototype[@@hasInstance]()
-
Specifies the default procedure for determining if a constructor function recognizes an object as one of the constructor's instances. Called by the
instanceof
operator.
Examples
Difference between Function constructor and function declaration
Functions created with the Function
constructor do not create closures to their creation contexts; they
always are created in the global scope. When running them, they will
only be able to access their own local variables and global ones, not
the ones from the scope in which the Function
constructor was created. This is different from using eval()
with code for a function expression.
// Create a global property with `var` var x = 10; function createFunction1() { const x = 20; return new Function("return x;"); // this `x` refers to global `x` } function createFunction2() { const x = 20; function f() { return x; // this `x` refers to the local `x` above } return f; } const f1 = createFunction1(); console.log(f1()); // 10 const f2 = createFunction2(); console.log(f2()); // 20
While this code works in web browsers, f1()
will produce a ReferenceError
in Node.js, as x
will not be found. This is because the top-level scope in Node is not the global scope, and x
will be local to the module.