Skip to content
Advertisement

Cannot assign to read only property ‘name’ of object ‘[object Object]’

The following code will throw an error only for the name property. It could be fixed by specifying name property as writable in Object.create arguments but I’m trying to understand why is this happening(and maybe there is a more elegant way to fix it).

JavaScript

Advertisement

Answer

You cannot modify the name property of a function. The descriptor says it is not writable

JavaScript

But since it is configurable, you could use Object.defineProperty().

JavaScript

EDIT

I’m back! So… As I said previously in comments, I think I have identified your problem. I answered a bit too fast and did not see that your ES5 inheritance is wrong.

ExtendedClass.prototype = Object.create(BaseClass); is not what you want to do. Doing so means the prototype of ExtendedClass becomes a constructor function. This obviously generates an unexpected behavior.

JavaScript

In your code, this is a function and refers to BaseClass. That is why you are not allowed to modify its name…

In fact, when working with inheritance in JavaScript, you generally need these two lines:

JavaScript

Here is a valid implementation:

JavaScript
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement