TypeError: setting getter-only property "x"

メッセージ

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

エラータイプ

strict モードでのみ、TypeError

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

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

下記の例では、プロパティの getter の設定方法を示しています。setter は指定していないため、temperature プロパティに 30 をセットしようとすると、TypeError がスローされます。詳細は 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 }]

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama
 最終更新者: YuichiNukiyama,