• JavaScript基础概念之----面向对象----理解对象


    创建自定义对象最简单的方式是创建一个Object的实例:

    var person = new Object()
    
    person.name = 'adhehe'
    person.age = 23
    person.job = '程序开发'
    
    person.getName = function(){
        return this.name
    }

    使用对面字面量创建一个普通对象实例:

    var person = {
        name:'adhehe',
        age:23,
        job:'程序开发',
        getName:function(){
            return this.name
        }
    }

    ECMAScript中有两种属性类型

    • 数据属性
    • 访问器属性

    数据属性

    它包含一个数据值的位置,在这个位置可以读取和写入值。

    [[Configurable]]:

    • 能否delete删除属性从而重新定义属性
    • 能否修改属性的特性
    • 能否把属性修改为访问器属性
    • 直接在对象上定义的属性,Configurable 默认值为true

    [[Enumerable]]:

    • 能否通过 for-in 循环返回属性
    • 直接在对象上定义的属性,Enumerable 默认值为true

    [[Writable]]:

    • 能否修改属性的值
    • 直接在对象上定义的属性,Enumerable默认值为true

    [[Value]]:

    • 包含这个属性的数据值
    • 读取属性值的时候,从这个位置读取
    • 写入属性值的时候,把新值保存在这个位置
    • 默认值为undefined

    要修改属性默认的特性,必须使用 Object.defineProperty()方法:

    var person = {}
    
    Object.defineProperty(person,'name',{
        configurable:false,
    enumerable:true, writable:
    false, value:'adhehe' })

    //一旦把属性定义为不可配置的,就不能再把它变回可配置了
    //在调用此方法创建的新的属性时,如果不指定,则configurable、enumerable、writable默认值都为false

    访问器属性

    它不包含数据值,它包含一对getter函数和setter函数

    [[Configurable]]:

    • 能否delete删除属性从而重新定义属性
    • 能否修改属性的特性
    • 能否把属性修改为访问器属性
    • 直接在对象上定义的属性,Configurable 默认值为true

    [[Enumerable]]:

    • 能否通过 for-in 循环返回属性
    • 直接在对象上定义的属性,Enumerable 默认值为true

    [[Get]]:

    • 读取属性时调用的函数
    • 默认值为undefined
    • 如果未指定此函数,则属性不可读取

    [[Set]]:

    • 写入属性时调用的函数
    • 默认值为undefined
    • 如果未指定此函数,则属性不可写入

    访问器属性不能直接定义,必须使用 Object.defineProperty()来定义。

    var person = {
        name:'adhehe',
        _age:23
    }
    
    Object.defineProperty(person,'age',{
        get:function(){
            return this._age;
        },
        set:function(newVal){
            if(newVal > 59){
                this._age = 'old';
            }else{
         this._age = newVal;
         } } }) person.age
    = 45; console.log(person.age)//输出 45 person.age = 65; console.log(person.age)//输出 old

    Object.defineProperties()方法可一次定义多个属性:

    var person = {}
    
    Object.defineProperties(person,{
        name:{
            writable:true,
            value:'adhehe'
        },
         _age:{
            writable:true,
            value:23
        },
        age:{
            get:function(){
                return this._age;
            },
            set:function(newVal){
                if(newVal > 59){
                    this._age = 'old';
                }else{
                    this._age = newVal;
                }
            }
        }
    })        

    Object.getOwnPropertyDescriptor()方法可取得给定属性的描述符:

    //以前面person为例
    
    var desc = Object.getOwnPropertyDescriptor(person,'name');
    console.log(desc.value) //adhehe
    console.log(desc.configurable) //false
    console.log(desc.get) //undefined
  • 相关阅读:
    h5 在全屏iphonex中的适配
    http响应状态码301和302
    http协议
    画图-drawpoint and drawpath
    Android-自己定义meta-data扩展数据
    iOS应用公布Invalid Binary问题解决方式
    在线工具集合(新增cron quartz表达式在线生成……)
    SSH 占用数据库连接不释放问题
    Oracle数据库获取uuid函数
    Android Message handling (based on KK4.4)
  • 原文地址:https://www.cnblogs.com/adhehe/p/9787418.html
Copyright © 2020-2023  润新知