美文网首页Web开发
JavaScript对象属性

JavaScript对象属性

作者: Toly | 来源:发表于2020-02-15 22:52 被阅读0次
JavaScript对象.png

JavaScript对象属性

简单理解对象

运行环境 node V10.16.3

对象属性

  1. 数据属性
    数据属性包含一个数据值的位置,可以读取或写入值。
    • [[Configurable]]
      标识能否通过delete删除属性,从而定义新的属性;或者是能否把数据属性修改为访问器属性,默认为false,定义对象时用configurable
    • [[Enumerable]]
      代表能否通过for-in循环返回属性,默认为true,定义对象时用enumerable
    • [[Writable]]
      代表能否修改属性的值,默认为true,定义对象时用writable
    • [[Value]]
      包含着这个属性的值,默认为undefined,定义对象时用value
      应用场景:
var person = {}
Object.defineProperty(person, 'name', {
    writable: true,
    enumerable: false,
    value: 'tolerious'
})
Object.defineProperty(person, 'age', {
    writable: true,
    enumerable: true,
    value: 12
})
Object.defineProperty(person, 'job', {
    configurable: false,
    writable: false,
    enumerable: true,
    value: 'engineer'
})
Object.defineProperty(person, 'sex', {
    configurable: true,
    writable: true,
    enumerable: true,
    value: 'female'
})
for (let x in person) {
    console.log(x)
}
console.log(person)
person.job = 'teacher'
person.sex = 'male'
console.log(person)
delete person.age
delete person.job
delete person.sex
console.log(person)
运行结果:
age
job
sex
{ age: 12, job: 'engineer', sex: 'female' }
{ age: 12, job: 'engineer', sex: 'male' }
{ age: 12, job: 'engineer' }
  • 在for in 循环中name属性被屏蔽了,age被打印了出来;ageconfigurabletrue,所以用delete就将其在对象中删除了,

2.访问器属性
该属性,不包含数据值,包含一对儿getter和setter函数,但不是必需。

  • [[Configurable]] 与数据属性相同
  • [[Enumerable]] 与数据属性相同
  • [[Get]] 读取属性时会被调用,默认值为undefined
  • [[Set]] 写入属性时被调用,默认值是undefined
    应用场景:
var person = {
    _age: 20,
    _job: 'engineer'

}
Object.defineProperty(person, 'age', {
    get: function () {
        return this._age
    },
    set: function (val) {
        this._age = val
    }
})
Object.defineProperty(person, 'job', {
    get: function () {
        return this._job
    }
})
console.log(person)
person.age = 15
person.job = 'teacher'
console.log(person)
运行结果:
{ _age: 20, _job: 'engineer' }
{ _age: 15, _job: 'engineer' }

通过定义age的访问器属性get,set从而对person的内部变量_age进行值的读取与赋值。
gettersetter可不同时进行定义,如果只定义getter则意味着该属性时不能进行赋值操作。
每定义一个属性就要用defineProperty是比较繁琐的,所以可以用defineProperties来同时定义多个属性。

var person = {}
Object.defineProperties(person, {
    _year: {
        writable: true,
        value: 2020,
        enumerable: true
    },
    year: {
        get: function () {
            return this._year
        },
        set: function (val) {
            this._year = val
        }
    }
})
console.log(person)
person.year = 2021
console.log(person)
运行结果:
{ _year: 2020 }
{ _year: 2021 }

通过getOwnPropertyDescriptor()方法我们可以获取给定属性的描述符,就可以知道该属性时数据属性还是访问器属性了。

var person = {}
Object.defineProperties(person, {
    _year: {
        writable: true,
        value: 2020,
        enumerable: true
    },
    year: {
        get: function () {
            return this._year
        },
        set: function (val) {
            this._year = val
        }
    }
})
console.log(person)
person.year = 2021
console.log(person)
console.log(Object.getOwnPropertyDescriptor(person,"_year"))
console.log(Object.getOwnPropertyDescriptor(person,"year"))
运行结果:
{ _year: 2020 }
{ _year: 2021 }
{ 
  value: 2021,
  writable: true,
  enumerable: true,
  configurable: false 
}
{
  get: [Function: get],
  set: [Function: set],
  enumerable: false,
  configurable: false 
}

相关文章

  • js的prototype

    javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解...

  • JavaScript - prototype理解

    Javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解...

  • JavaScript学习笔记7_对象_2对象属性

    属性检测 JavaScript对象是属性的集合,我们经常需要判断某个属性是否存在于某个对象中。JavaScript...

  • JavaScript对象属性

    JavaScript对象属性 简单理解对象 运行环境 node V10.16.3 对象属性 数据属性数据属性包含...

  • javascript对象的遍历、内存分布和封装特性

    javascript对象的遍历、内存分布和封装特性 一、javascript对象遍历 1.javascript属性...

  • 继承与原型链(笔记)

    JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的...

  • Javascript全局属性和方法

    JavaScript 全局属性和方法 JavaScript 可用于创建Javascript对象。 CONTENT ...

  • javascript对象

    Javascript 对象总结: JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可...

  • 原型与原型链

    JavaScript中,每个对象都有constructor属性和proto属性,其中proto属性指向创建该对象的...

  • javascript 对象属性

    先举个栗子(~ ̄▽ ̄)~在js中为一个对象添加属性我们可以这样 javascript对象的属性可以分为两类:(1)...

网友评论

    本文标题:JavaScript对象属性

    本文链接:https://www.haomeiwen.com/subject/gzjwxhtx.html