Javascript 构造函数中defineProperties的用法

Javascript 构造函数中defineProperties的用法,javascript,Javascript,我喜欢使用Object.defineProperties方法定义属性。此外,我喜欢有getter/setter 我已经想出了这个例子: var Car = function(vendor, speed) { Object.defineProperties(this, { vendor: { get: function() { return vendor; }, set: function(newVendor) { v

我喜欢使用Object.defineProperties方法定义属性。此外,我喜欢有getter/setter

我已经想出了这个例子:

var Car = function(vendor, speed) {
  Object.defineProperties(this, {
    vendor: {
      get: function() {
        return vendor;
      },
      set: function(newVendor) {
        vendor = newVendor;
      },
      enumerable: true
    },
    speed: {
      get: function() {
        return speed;
      },
      set: function(newSpeed) {
        speed = newSpeed;
      },
      enumerable: true
    }
  });  
}
我不明白的是如何初始化属性

在我的示例中:我是否必须在定义下面写“this.vendor=vendor”

此外:可配置参数的用途是什么

文档中说它指定了是否可以更改属性描述符。 这到底是什么意思

我不明白的是如何初始化属性。
在我的示例中:我是否必须在定义下面写“this.vendor=vendor”

这对于初始化属性是正确的,您将执行
this.vendor='vendorValue'
(将其视为简单属性)

此外:可配置参数的用途是什么

configurable
如果设置为true,则允许使用
对象重新定义属性描述符。defineProperty
对象。defineProperties
默认为false,如果再次使用
对象。defineProperty
对象。defineProperties
重新定义属性,则会引发错误

描述符是传递给
对象.defineProperty
(或
对象.defineProperties
)的属性的描述

初始值 在我的示例中:我是否必须在定义下面写“this.vendor=vendor”

你可以。但是你也可以像这样使用值描述符

vendor: {
    set: function (newVendor) { ... },
    enumerable: true,
    value: 5 // here is the initial value
}
可配置 可配置参数的用途是什么?文档中说它指定了是否可以更改属性描述符。那到底是什么意思

指定是否可以删除属性或更改其描述符。这意味着,如果设置为false,则一旦定义,就不能使用
Object.defineProperties
更改getter、setter、enumerable、writable等描述符

假设您有一些对象
var hat={}
。我们在该对象上创建一个属性
hat.style=“fancy”
。默认情况下,此属性是可配置的。但是,当使用
Object.defineProperties
时,默认情况下它是
false

因此,假设我们将
可写
(属性描述符)更改为
false
。现在,
hat.style=“wacky”
不起作用,
hat.style
的值仍然是
“fancy”
。但是,通过将
configurable
设置为
false
,可以将
style
属性更改为不可配置。现在我们无法将
可写
描述符设置回
,甚至无法再次将
可配置
设置为

参考资料和进一步阅读:

非常感谢。我希望我能给你的答案打分。但是我到现在为止还没有获得足够的学分。。。
vendor: {
    set: function (newVendor) { ... },
    enumerable: true,
    value: 5 // here is the initial value
}