TypeError: setting a property that has only a getter

Message

TypeError: setting a property that has only a getter (Firefox)
TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)

Error type

TypeError in strict mode only.

What went wrong?

There is an attempt to set a new value to a property for which only a getter is specified. While this will be silently ignored in non-strict mode, it will throw a TypeError in strict mode.

Examples

The example below shows how to set getter for a property. It doesn't specify a setter, so a TypeError will be thrown upon trying to set the temperature property to 30. For more details see also the Object.defineProperty() page.

"use strict";

function Archiver() { 
  var temperature = null; 
  Object.defineProperty(this, 'temperature', { 
    get: function() { 
      console.log('get!'); 
      return temperature; 
    }
  });
}

var arc = new Archiver(); 
arc.temperature; // 'get!'

arc.temperature = 30;
// TypeError: setting a property that has only a getter

To fix this error, you will either need to remove line 16, where there is an attempt to set the temperature property, or you will need to implement a setter for it, for example like this:

"use strict";

function Archiver() {
  var temperature = null;
  var archive = [];

  Object.defineProperty(this, 'temperature', {
    get: function() {
      console.log('get!');
      return temperature;
    },
    set: function(value) {
      temperature = value;
      archive.push({ val: temperature });
    }
  });

  this.getArchive = function() { return archive; };
}

var arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 11;
arc.temperature = 13;
arc.getArchive(); // [{ val: 11 }, { val: 13 }]

See also

Document Tags and Contributors

 Contributors to this page: fscholz
 Last updated by: fscholz,