mik*_*ana 1 javascript properties getter-setter ecmascript-5 defineproperty
内联,对象文字'get function()'样式和Object.defineProperty之间的功能似乎有重叠.
MDN docs for get https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get没有提到内联'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'] || ''
},
}
Run Code Online (Sandbox Code Playgroud)
Mozilla的Jeff Walden在2010年(似乎是)的文章中说:
"我们已经删除了对SpiderMonkey和Mozilla中一些过时的getter/setter语法的支持.这不包括{get property(){return"value";},set property(v){}},这是广泛使用的这是最新标准的一部分."
所以:
defineProperty(__defineGetter__并且__defineSetter__已弃用),它们不会被弃用defineProperty为您提供更多粒度并控制您要定义的属性:您可以决定该属性是否为configurabile,writable和enumerable.你不能用get和做set.此外,defineProperty您无法定义必要的getter或setter,只能定义一个值.get并且set当您不需要更多粒度时,它是一种糖语法,并且可以在对象定义本身中使用,defineProperty必须在创建实例后使用.defineProperty在需要更多粒度时使用,或者您不需要指定getter和setter但只需要一个值.希望能帮助到你.
关于get和的规范的链接set
ES5:http://www.ecma-international.org/ecma-262/5.1/#sec-11.1.5
ES6(草案):http://people.mozilla.org/~jorendorff/es6-draft.html#sec-method-definitions-static-semantics-propname