zoukankan      html  css  js  c++  java
  • 关于JavaScript函数

    object.defineProperty()函数

    再学习这个函数之前,我们先创建一个object对象

    var person = {}
    person.name = "junlebao"
    person.age = 17
    person.isAdult = "未成年"

    这样我们创建对象完成之后,我们在思考几个问题

    现在我有几个要求:

    要求1: 我们的age属性代表年龄,总不能是个负数吧,首先age应该有一个限制.

    要求2: 我们的isAdult是随着age的不同,所显示的转态也不同.

    显然,上述的方法创建的对象,无法满足我们这些要求.

    这时候,我们的object.defineProperty()函数就派上了用场,我们就先上代码

    注意:以下代码中,在对象的定义中,写的是带下划线的:_age,

    而在defineProperty()函数里写的属性名是不带下划线的:age,

    外部使用该对象的属性时,用不带下划线的:

     1     var person = {
     2       _age: 16,
     3       isAdult: "未成年"
     4     }
     5     Object.defineProperty(person, 'age', {
     6       get: function () {                                  //读取时用到的函数
     7         return this._age
     8       },
     9       set: function (newValue) {                        //设置属性值的时候用到的函数
    10         if (newValue > 0 && newValue <= 150) {         //对年龄一个限制,在(0,150]之间
    11           this._age = newValue
    12           if (this._age >= 18) {
    13             this.isAdult = "已成年"
    14           }
    15         }
    16       }
    17     })
    18     person.age = 12                   //调用set函数
    19     console.log(person.age);          //调用get函数
    20     console.log(person.isAdult);      //未成年
    21     person.age = 25                   //调用set函数  
    22     console.log(person.age);          //调用get函数
    23     console.log(person.isAdult);      //已成年  

    运行结果如下:

     Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性。

    Object.defineProperty()函数的格式:

    Object.defineProperty(obj, prop, desc)

    参数:

    Obj:表示增加属性的对象   (必需)

    Prop:属性名         (必需)

    Desc:描述属性的一个集合  (必需)

    数据描述符: 拥有可写或不可写值的属性*

    value : 属性的值,可以为任意类型  默认为undefined

    wriable: 属性的值是否可以被修改  为true(默认值)可以被修改  为false 不可以被修改

    存取描述符:由一对getter-setter函数功能来描述的属性*

    get:在读取属性时调用的函数,默认值为undefined。

    set:在写入属性时调用的函数,默认值为undefined。

    下面两个是公有的属性

    enumerable: 此属性是否可以被枚举(使用for...in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false。

    configurable: 是否可以删除目标属性或是否可以再次修改属性的特性(writable, configurable, enumerable)。设置为true可以被删除或可以重新设置特性;设置为false,不能被可

    以被删除或不可以重新设置特性。默认为false。有两个作用: 目标属性是否可以使用delete删除,目标属性是否可以再次设置特性.

    提示:一旦使用Object.defineProperty给对象添加属性,那么如果不设置属性的特性,那么configurable、enumerable、writable这些值都为默认的false.

  • 相关阅读:
    Python统计字符串中出现次数最多的人名
    初探CORBA组件化编程
    shell脚本—基础知识,变量
    Java多线程--线程交替
    Qt中采用多线程实现Socket编程
    Python字符串格式化--formate()的应用
    JAVA中浅复制与深复制
    Python这些问题你会吗?
    PHP控制反转(IOC)和依赖注入(DI
    Go 语言指针
  • 原文地址:https://www.cnblogs.com/junlebao/p/juelebao.html
Copyright © 2011-2022 走看看