--- title: 'TypeError: setting getter-only property "x"' slug: Web/JavaScript/Reference/Errors/Getter_only tags: - Error - Errors - JavaScript - Strict Mode - TypeError translation_of: Web/JavaScript/Reference/Errors/Getter_only ---
{{jsSidebar("Errors")}}

メッセージ

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

エラータイプ

strict モードでのみ、{{jsxref("TypeError")}}。

何がうまくいかなかったのか?

getter しか指定されていないプロパティに、新しい値を設定しようとしています。非 strict モードでは暗黙裡に無視されるだけですが、strict モードでは {{jsxref("TypeError")}} がスローされます。

下記の例では、プロパティの getter の設定方法を示しています。setter は指定していないため、temperature プロパティに 30 をセットしようとすると、TypeError がスローされます。詳細は {{jsxref("Object.defineProperty()")}} ページを見てください。

"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 getter-only property "temperature"

このエラーを修正するには、temperature プロパティに値を設定しようとしている 16 行目を取り除くか、次のように setter を実装します:

"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 }]

関連項目