• JavaScript基础知识整理(对象的属性)


    对象的定义

    无序属性的集合,属性可以包括基本值,对象或函数。

    JavaScript中有两类属性,数据属性和访问器属性。

    特征值

    JavaScript使用特征值来描述属性的行为,因为是为实现JavaScript引擎用的,所以不能直接访问。

    数据属性有4个特性:[[Configurable]]、[[Enumerable]]、[[Writable]]和[[Value]]。

    [[Configurable]]表示能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true。

    [[Enumerable]]表示能否使用for-in循环返回属性,默认为true。

    [[Writable]]表示能否修改属性的值,默认为true。

    [[Value]]包含着属性的值,读取属性值时从这里读,写入属性值时从这里写,默认为undefined。

    可以使用Object.defineProperty()来修改属性的特性,这个函数接收3个参数:属性所在对象,属性名,描述符对象。

    var person = {};
    Object.defineProperty(person,"name",{
            writable:false,
            value:"tony"  
    } 
    alert(person.name)//Tony
    person.name = "sam";
    alert(person.name)//Tony   因为writable设置为false所以不能修改值

    访问器属性没有数据值,相对的有setter()和getter()函数,读取属性值时调用getter(),写入属性值时调用setter()。

    访问器属性也有4个特性:[[Configurable]]、[[Enumerable]]、[[Get]]和[[Set]]。

    [[Configurable]]表示能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true。

    [[Enumerable]]表示能否使用for-in循环返回属性,默认为true。

    [[Get]]读取属性时调用的函数,默认为undefined。

    [[Set]]写入属性时调用的函数,默认为undefined。

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

    var book = {
          _year:2000,
         edition:1
    }    
    Object.defineProperty(book,"year",{
          get:function(){
               return this._year;        
          } 
          set:function(newyear){
               if(newyear > 2000){
                     this._year = newyear;
                     this.edition = newyear - 2000
              }
        } 
    });    
    book.year = 2001;
    alert(book.edition);//2

    定义多个属性

    当要定义多个属性时可以用Object.defineProperties(),接收两个参数,要添加属性的对象以及由想要添加属性组成的对象。

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

    读取属性的特性

    想要获得属性的特性值可以用Object.getOwnPropertyDescriptor()方法,接收两个参数,属性所属的对象,属性名称,返回一个包含特性值的对象。

    var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
    alert(descriptor.value);//"2000"
    var descriptor1 = Object.getOwnPropertyDescriptor(book,"year");
    alert(descriptor.value);//"undefined"

     

     

  • 相关阅读:
    七色花基本权限系统(6)- 让EntityFramework Code First自动合并/迁移/数据初始化
    koa 上传图片,上传文件,批量上传文件,批量上传图片...
    js 正则匹配标签,过滤标签不保留内容和过滤标签保留内容,过滤标签的的属性
    js 用xlsx读取excel、json_to_execl、excel_to_json导入导出
    css 心形动画 爱心动画
    NodeJs + koa2 + sequelize-auto + sequelize 搭建项目
    非框架, 纯原生JS “商品详情跳转到商品列表,并记录高度“ 的写法思路
    vue 渲染完成事件
    promise扩展一个stop方法
    vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
  • 原文地址:https://www.cnblogs.com/xianglan666/p/13100296.html
Copyright © 2020-2023  润新知