Javascript JS getters:defineProperty是否取代或补充了旧的内联';获取'';设置';语法?
内联、对象文字“get function()”样式和object.defineProperty之间的功能似乎有重叠 get的MDN文档没有提到内联“get”函数已被弃用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
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
不能定义必要的getter或setter,只能定义一个值defineProperty
- 使用
和get
当您不需要更大的粒度时,它是一种糖类语法,可以在对象定义本身中使用,其中创建实例后必须使用set
。当您需要更大的粒度,或者不需要指定getter和setter,只需要指定一个值时,请使用defineProperty
defineProperty
get
和set
ES5:
ES6(草案):- 内联get/set可以
- 如果支持
(定义属性
和\uuu定义设置
被弃用),则它们不会被弃用\uu定义设置
为您提供了更大的粒度和对要定义的属性的控制:您可以决定该属性是否是可配置的、可写的和可枚举的。使用defineProperty
和get
无法做到这一点。此外,使用set
不能定义必要的getter或setter,只能定义一个值defineProperty
- 使用
和get
当您不需要更大的粒度时,它是一种糖类语法,可以在对象定义本身中使用,其中创建实例后必须使用set
。当您需要更大的粒度,或者不需要指定getter和setter,只需要指定一个值时,请使用defineProperty
defineProperty
get
和set
ES5:
ES6(草稿):这是一个非常全面的答案,谢谢!您能否为当前规范中仍然存在的“get”提供参考?我一直在看ES5规范,但有点难找到…这是一个非常全面的答案,谢谢!您能否为当前规范中仍然存在的“get”提供参考?我一直在寻找ES5规范,但它有点难找到。。。。