From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../errors/cant_redefine_property/index.html | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/errors/cant_redefine_property/index.html (limited to 'files/zh-cn/web/javascript/reference/errors/cant_redefine_property') diff --git a/files/zh-cn/web/javascript/reference/errors/cant_redefine_property/index.html b/files/zh-cn/web/javascript/reference/errors/cant_redefine_property/index.html new file mode 100644 index 0000000000..abba81b6f2 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/errors/cant_redefine_property/index.html @@ -0,0 +1,50 @@ +--- +title: 'TypeError: can''t redefine non-configurable property "x"' +slug: Web/JavaScript/Reference/Errors/Cant_redefine_property +tags: + - JavaScript + - 类型错误 + - 错误提示 +translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property +--- +
{{jsSidebar("Errors")}}
+ +

错误提示

+ +
TypeError: can't redefine non-configurable property "x" (Firefox)
+TypeError: Cannot redefine property: "x" (Chrome)
+
+ +

错误类型

+ +

{{jsxref("TypeError")}}

+ +

哪里出错了?

+ +

这种错误的起因在于试图给对象重新定义一个属性,但是该属性是不可配置的。 configurable 特性控制着该属性是否可以从对象中删除,以及它的各个特性(除 writable 之外)是否可以修改。通常使用对象初始化语句定义的对象属性是可配置的。而使用 {{jsxref("Object.defineProperty()")}} 定义的属性则默认不可配置。

+ +

示例

+ +

使用 object.defineProperty 创建的不可配置属性

+ +

在使用 {{jsxref("Object.defineProperty()")}} 创建属性的时候,如果没有明确将其设定为可配置的,那么创建出来的属性就是不可配置的。

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar"});
+
+Object.defineProperty(obj, "foo", {value: "baz"});
+// TypeError: can't redefine non-configurable property "foo"
+
+ +

如果想要稍后重新定义的话,那么需要将 "foo" 属性设置为可配置的。

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar", configurable: true});
+Object.defineProperty(obj, "foo", {value: "baz", configurable: true});
+ +

相关内容

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