屬性類型
1、數(shù)據(jù)屬性
- value:就是屬性的值。
- writable:決定屬性能否被賦值。
- enumerable:決定 for in 能否枚舉該屬性。
- configurable:決定該屬性能否被刪除或者改變特征值。
function fn () {}
fn.a = 1
Object.defineProperty(fn, 'b', {value: 2, writable: false, enumerable: false, configurable: true});
console.log(Object.getOwnPropertyDescriptor(fn, 'a')) // {value: 1, writable: true, enumerable: true, configurable: true}
console.log(Object.getOwnPropertyDescriptor(fn, 'b')) // {value: 2, writable: false, enumerable: false, configurable: true}
fn.b = 10000
console.log(fn.b) // 2
2、訪問器(getter/setter)屬性
- getter:在取屬性值時被調(diào)用的,默認值undefined
- setter:在設(shè)置屬性值時被調(diào)用的函數(shù),默認值undefined
- enumerable:決定 for in 能否枚舉該屬性。
- configurable:決定該屬性能否被刪除或者改變特征值。
var fn = {}
Object.defineProperty(fn, 'b', {
get: function() {
console.log('get b', this._b)
return this._b
},
set: function(newVal) {
console.log('set b', newVal)
this._b = newVal
},
enumerable: true, configurable: true
});
fn.b = 22 // set b 22
console.log(fn.b) // 22