资讯专栏INFORMATION COLUMN

javascript 面向对象版块之定义多个对象属性以及读取属性特性

wendux / 2485人阅读

摘要:返回值是一个对象,如果是访问器属性,这个对象的属性有和如果是数据属性,这个对象的属性有和。上一篇面向对象版块之对象属性下一篇面向对象版块之创建对象

这是 javascript 面向对象版块的第三篇文章,主要讲解的是多个属性的定义以及读取属性的特性。前面这几章内容目的在于加深对对象的理解,这样可以利于理解后面的原型链以及继承方面的知识,或者你也可以了解一下不一样的 javascript 对象属性的定义。

定义多个属性

在上一篇博客中已经讲解了定义一个属性的方法,那就是 Object.defineProperty,那么在日常开发中如果要定义多个属性呢,该使用什么样的方法,其实可以联想到使用 Object.defineProperties,对,就是这个方法,ECMAScript 5 定义了 Object.defineProperties() 方法,利用这个方法可以通过描述符一次定义多个属性。这个方法接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。例如:

var book = {};
Object.defineProperties(book, {
  _year: {
    value: 2017
  },
  edition: {
    value: 1,
    writable: true,
  },
  year: {
    get: function () {
      return this._year;
    },
    set: function (newVal) {
      if (newVal > this._year) {
        this.edition += newVal - this._year;
      }
    }
  }
})
book.year = 2018;
console.log(book.edition); // 2

以上代码在 book 对象上定义了两个数据属性( _year 和 edition )和一个访问器属性( year ),这里的属性都是在同一时间创建的。

一样的,在调用 Object.defineProperties() 方法时,如果不指定, configurable 、 enumerable 和writable 特性的默认值都是 false 。
读取属性的特性

对于读取属性的特性可以使用 Object.getOwnPropertyDescriptor()方法,这个方法接收两个参数:属性所在的对象和要读取其描述符的属性名称。返回值是一个对象,如果是访问器属性,这个对象的属性有 configurable 、 enumerable 、 get 和 set ;如果是数据属性,这个对象的属性有 configurable 、 enumerable 、 writable 和 value 。例如:

var book = {};
Object.defineProperties(book, {
  _year: {
    value: 2017
  },
  edition: {
    value: 1,
    writable: true,
  },
  year: {
    get: function () {
      return this._year;
    },
    set: function (newVal) {
      if (newVal > this._year) {
        this.edition += newVal - this._year;
      }
    }
  }
})

var descriptor1 = Object.getOwnPropertyDescriptor(book, "_year");
console.log(descriptor1.value); // 2017
console.log(descriptor1.configurable); // false
console.log(typeof descriptor1.get); // undefined

var descriptor2 = Object.getOwnPropertyDescriptor(book, "edition");
console.log(descriptor2.value); // 1
console.log(descriptor2.configurable); // false
console.log(descriptor2.writable); // true

var descriptor3 = Object.getOwnPropertyDescriptor(book, "year");
console.log(typeof descriptor3.value); // undefined
console.log(descriptor3.enumerable); // false
console.log(typeof descriptor3.get); // function
console.log(typeof descriptor3.set); // function

对于数据属性 _year , value 等于最初的值, configurable 是 false ,而 get 等于 undefined 。对于访问器属性 year , value 等于 undefined , enumerable 是 false ,而 get 是一个指向 getter 函数的指针。

小结

这篇文章主要讲解了定义多个属性读取属性的特性,分别使用了 Object.defineProperties()Object.getOwnPropertyDescriptor()方法,了解了这种定义属性和读取属性的方法之后,相信你对于对象会有更加深刻地理解。

上一篇:javascript 面向对象版块之对象属性

下一篇:javascript 面向对象版块之创建对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93186.html

相关文章

  • javascript 面向对象版块对象属性

    摘要:上一篇面向对象版块之理解对象下一篇面向对象版块之定义多个对象属性以及读取属性特性 这是 javascript 面向对象版块的第二篇文章,主要讲解的是对象的属性,首先创建一个对象: var person = { name: Nicholas, age: 29, job: Software Engineer, sayName: function () { conso...

    lolomaco 评论0 收藏0
  • javascript 面向对象版块理解对象

    摘要:用代码可以这样描述安全到达国外面向过程既然说了面向对象,那么与之对应的就是面向过程。小结在这篇文章中,介绍了什么是面向对象和面向过程,以及中对象的含义。 这是 javascript 面向对象版块的第一篇文章,主要讲解对面向对象思想的一个理解。先说说什么是对象,其实这个还真的不好说。我们可以把自己当成一个对象,或者过年的时候相亲,找对象,那么你未来的老婆也是一个对象。我们就要一些属性,比...

    lovXin 评论0 收藏0
  • javascript面向对象总结

    摘要:之面向对象总结前言在中是没有类的概念的,所以它的对象与基于类的语言中的对象不同。一理解对象张三上面通过构造函数创建了一个对象,并为它添加了三个属性。 JavaScript之面向对象总结 前言:在ECMAScript中是没有类的概念的,所以它的对象与基于类的语言中的对象不同。ECMA-262把对象总结为:无序属性的集合,其属性包含基本值、对象或者函数。 一、理解对象 var person...

    taowen 评论0 收藏0
  • JavaScript基础学习——面向对象部分(属性类型)

    摘要:今天结合高编第六章开始回顾和深入学习面向对象部分包括对象原型原型链继承等部分。二对象的属性类型勾鑫宇,数据属性访问器属性书上讲到属性类型时,只是简单提了一下是为了表示对象的特性,描述了属性的特征,并且在中不能直接访问。 前言 JavaScript发明之始,从技术上来讲就是一门面向对象的语言,但在ES6之前,JS的很多特性和传统的面向对象语言有所不同,比如没有类的概念(ES6有了clas...

    microelec 评论0 收藏0
  • javascript面向对象创建对象

    摘要:表示能否修改属性的值。对于直接在对象上定义的属性,这个特性的默认值为。默认值为设置一个属性的值会导致其他属性的变化如果的有值,就不要对再设置属性所在的对象要读取其描述符的属性名称 对象定义 对象定义:无序属性的集合,其属性可以包含基本值、对象或函数 对象就是 键值对 其中值可以是数据和函数 对象方法就是对象的属性 不过这个属性是函数 var p = new Object() p....

    bingchen 评论0 收藏0

发表评论

0条评论

wendux

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<