zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    CentOS7使用集群同步脚本对文件同步分发
    CentOS7安装jdk1.8
    CentOS7+CDH5.12.1集群搭建
    nginx通配符
    Nginx反向代理及配置
    一些好玩有用的书签
    linux操作小技巧锦集
    系统压测结果对比:tomcat/thinkphp/swoole/php-fpm/apache
    python修改linux日志(logtamper.py)
    【原创】给定随机数的取值范围(最小值、最大值),且要求多次取得的随机数最后的结果有一个固定的平均值
  • 原文地址:https://www.cnblogs.com/adhehe/p/9787418.html
Copyright © 2011-2022 走看看