Javascript JS getters:defineProperty是否取代或补充了旧的内联';获取'';设置';语法?

Javascript JS getters:defineProperty是否取代或补充了旧的内联';获取'';设置';语法?,javascript,properties,getter-setter,ecmascript-5,defineproperty,Javascript,Properties,Getter Setter,Ecmascript 5,Defineproperty,内联、对象文字“get function()”样式和object.defineProperty之间的功能似乎有重叠 get的MDN文档没有提到内联“get”函数已被弃用 var john = { firstName: 'John', lastName: 'Smith', age: 21, gender: 'Male' // () → String // Returns

内联、对象文字“get function()”样式和object.defineProperty之间的功能似乎有重叠

get的MDN文档没有提到内联“get”函数已被弃用

    var john = {
        firstName: 'John',
        lastName:  'Smith',
        age:        21,
        gender:     'Male'

        // () → String
        // Returns the full name of object.
        get name() {
            return this.firstName + ' ' + this.lastName
        },

        // (new_name:String) → undefined
        // Sets the name components of the object,
        // from a full name.
        set name(new_name) {
            var names = new_name.trim().split(/\s+/)
            this.firstName = names['0'] || ''
            this.lastName  = names['1'] || ''
        },
    }
Mozilla的杰夫·沃尔登(Jeff Walden)在2010年发表的这篇文章指出:

“我们已经删除了SpiderMonkey和Mozilla中对一些过时的getter/setter语法的支持。这不包括{get property(){return“value”;},set property(v){}},它被广泛使用,是最新标准的一部分。”

因此:

  • 内联获取/设置是否正常
  • 内联get/set是否被弃用以支持defineProperty
  • 我应该什么时候使用
      • 内联get/set可以
      • 如果支持
        定义属性
        \uuu定义设置
        \uu定义设置
        被弃用),则它们不会被弃用
      • defineProperty
        为您提供了更大的粒度和对要定义的属性的控制:您可以决定该属性是否是可配置的、可写的和可枚举的。使用
        get
        set
        无法做到这一点。此外,使用
        defineProperty
        不能定义必要的getter或setter,只能定义一个值
      • 使用
        get
        set
        当您不需要更大的粒度时,它是一种糖类语法,可以在对象定义本身中使用,其中创建实例后必须使用
        defineProperty
        。当您需要更大的粒度,或者不需要指定getter和setter,只需要指定一个值时,请使用
        defineProperty
      希望能有帮助

      有关
      get
      set

      ES5

      ES6(草案)

      • 内联get/set可以
      • 如果支持
        定义属性
        \uuu定义设置
        \uu定义设置
        被弃用),则它们不会被弃用
      • defineProperty
        为您提供了更大的粒度和对要定义的属性的控制:您可以决定该属性是否是可配置的、可写的和可枚举的。使用
        get
        set
        无法做到这一点。此外,使用
        defineProperty
        不能定义必要的getter或setter,只能定义一个值
      • 使用
        get
        set
        当您不需要更大的粒度时,它是一种糖类语法,可以在对象定义本身中使用,其中创建实例后必须使用
        defineProperty
        。当您需要更大的粒度,或者不需要指定getter和setter,只需要指定一个值时,请使用
        defineProperty
      希望能有帮助

      有关
      get
      set

      ES5


      ES6(草稿)

      这是一个非常全面的答案,谢谢!您能否为当前规范中仍然存在的“get”提供参考?我一直在看ES5规范,但有点难找到…这是一个非常全面的答案,谢谢!您能否为当前规范中仍然存在的“get”提供参考?我一直在寻找ES5规范,但它有点难找到。。。。