mck89
mck89

Reputation: 19231

Chrome and Safari strange behaviour in Javascript

I've written this peace of code:

var a=function(){
};

a.name="test";
a.prop="test2";

Now if I debug the code with the console:

console.log(a.name);
console.log(a.prop);

In Firefox i get a.name="test" and a.prop="test2", while in Safari and Chrome i get a.prop="test2" but a.name="".

It seems that there's no way to assign a "name" property on a function in Webkit browsers. Do you know why? But the most important thing is, do you know a workaround for that?

Upvotes: 2

Views: 523

Answers (5)

Poliveira
Poliveira

Reputation: 11

As you can see, "name" is not an option, so:

var a = function(){
};


a.props={name:"test",prop:"test2",anyKey:"anyValue"};

may be a solution.

Upvotes: 0

Wayne Werner
Wayne Werner

Reputation: 51807

It appears that you can't change the name of an anonymous/lambda function. If you'd like to set the name, you need to do something like var a=function b() {} then you can set the name.

Upvotes: 0

lincolnk
lincolnk

Reputation: 11238

why are you trying to assign properties to method? that seems like it should be a violation of some procedure or practice. if you want both a method and properties available, make a new object to contain them.

Upvotes: 0

James
James

Reputation: 111910

Function instances have a non-standard name attribute which will return the name of the function, or an empty string if the function is anonymous (like yours). Browsers will react differently when you try to write to the attribute, so I suggest using another property-name.

Upvotes: 6

Boris Delormas
Boris Delormas

Reputation: 2549

Some words are reserved in JS but some browsers still support them.

Take a look here : http://www.quackit.com/javascript/javascript_reserved_words.cfm

Upvotes: 0

Related Questions