Why can't I set a JavaScript function's name property?
I am learning JavaScript and read that functions are like objects and can have properties set like this:
var person = function(){
}
person.name="John Smith"; //output ""
person.age=21; //output 21
person.profession="Web Developer"; //output "Web Developer"
Why is the name property blank?
Thanks
Because name
is a non-standard, non-writable property of function objects. Function declarations and named function expressions are named, while you have an anonymous function expression whose name
is ""
.
You probably wanted a plain object:
var person = {
name: "John Smith",
age: 21,
profession: "Web Developer"
};
name
is a special property because it gives the name of the function when defined like this:
function abc(){
}
In this case name would return the string "abc"
. This name cannot be changed. In your case, the function does not have a name, hence the empty string.
http://jsfiddle.net/8xM7G/1/
You can change the name property!
The Function.name
property is configurable
as detailed on MDN.
Since it's configurable, we can alter its writable
property so it can be changed. We need to use defineProperty to do this:
var fn = function(){};
Object.defineProperty(fn, "name", {writable:true});
// now you can treat it like a normal property:
fn.name = "hello";
console.log(fn.name); // outputs "hello"