From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/errors/getter_only/index.html | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 files/ja/web/javascript/reference/errors/getter_only/index.html (limited to 'files/ja/web/javascript/reference/errors/getter_only') diff --git a/files/ja/web/javascript/reference/errors/getter_only/index.html b/files/ja/web/javascript/reference/errors/getter_only/index.html new file mode 100644 index 0000000000..831fb54785 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/getter_only/index.html @@ -0,0 +1,83 @@ +--- +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 }]
+ +

関連項目

+ + -- cgit v1.2.3-54-g00ecf