gpt4 book ai didi

javascript - Google Chrome Object.defineProperty 中的错误行为?

转载 作者:可可西里 更新时间:2023-11-01 01:56:33 27 4
gpt4 key购买 nike

我正在尝试使用 setter 和 getter 创建一个对象,这是我的代码:

var Player = function(height){
var _height = height;

Object.defineProperty(this, 'height', {
enumerable: false
, configurable: true
, writable: false
, get: function(){return _height;}
, set: function(val){_height = val;}
});
}

var myPlayer = new Player(10);

即使 writable defineProperty 选项的属性设置为 false,我收到以下错误:

Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>

writable当然设置为 true,但是如果我删除 writable,错误就会消失行。

我是不是做错了什么,或者这是一个错误?这发生在 Google Chrome,版本 30.0.1599.66

最佳答案

Mozilla MDN Object.defineProperty 阐明了这一点:

Property descriptors present in objects come in two main flavors: data descriptors and accessor descriptors. A data descriptor is a property that has a value, which may or may not be writable. An accessor descriptor is a property described by a getter-setter pair of functions. A descriptor must be one of these two flavors; it cannot be both.

这意味着,您可以使用其中之一:

  • 可写
  • getset

但是您不能使用它们的任意组合。在您的示例中,您指定了 writable 属性,这意味着它是一个数据描述符,不允许使用 getset 属性。

关于javascript - Google Chrome Object.defineProperty 中的错误行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com