• 面向对象--属性


    对象的属性 分为 : 数据属性 以及 访问器属性.
     
    1.数据属性
      1.1 数据属性的特性
        对象的每个普通属性都有四个特性 :
          [ [ Configurable ] ] , [ [ Enumerable ] ] , [ [ Writable ] ] , [ [ Value ] ]
          前三个的默认值都是true,最后的Value默认值是undefined
     
        Configurable
          为true时,表示:
            ①.该属性可以用delete操作符来 删除属性 从而重新定义属性.
            ②.该 属性的特性 可以被更改.
            ③.该属性可以被修改为 访问器属性(getter ,setter)
     
        Enumerable
          为true时,表示
            ①.该属性可以被for-in语句访问到.(in操作符应该也遵循此规律).
     
        Writable
          为true时,表示
            ①.该 属性的值 可以被修改.
        
        Value
          表示属性的值.当属性值读取时,在这个位置被读取;当设置属性值时,值会被设置在这里.
     
     
      1.2 修改属性的特性
        必须使用js提供的 Object.defineProperty(target, propertyName, descriptor);
          target : 属性所在的对象
          propertyName : 要修改的属性名称
          descriptor : 表示属性的特性的对象
          
          其中,descriptor 必须是如下格式 , 可以四个都配置,也可以省略其中的一部分不写.
              {
                configurable: true/false,
                writable:     true/false,
                enumerable:   true/false,
                value:        xxx
              }
     
    2.访问器属性
      2.1 访问器属性的特性
        每个访问器属性同样有四个特性:
          [ [ Configurable ] ] , [ [ Enumerable ] ] , [ [ Set ] ] , [ [ Get ] ]
     
      2.2 定义/修改 访问器属性
        只能使用 Object.defineProperty(target,propertyName,descriptor);
     
        例如:
            var book = { _year: 2004, edition: 1 };
            Object.defineProperty(book ,"year", {
                get: function(){
                  return this._year ;
                },
                set: function(value){
                  if(value > 2004){
                    this.edition += value - this._year ;
                    this._year = value ;
                  }
                }
            });
     
            book.year = 2005 ;
            console.log(book.edition); // display 2
     
     
    3.同时定义多个属性
      使用 Object.defineProperties(target , props);
     
      示例:
        var book = {};
     
        Object.defineProperties(book , {
          _year : {
            writable : true ,
            value : 2004
          },
          edition : {
            writable : true ,
            value : 1
          },
          year : {
            get : function(){
              return this._year ;
            },
            set : function(value){
              if(value > 2004){
                this.edition += (value - this._year);
                this._year = value ;
              }
            }
          }
        });
     
     
    4.读取属性的特性
      使用 Object.getOwnPropertyDescriptor( target , propertyName);
      返回值是个 descriptor对象 , 包裹着对应的属性特性.
     
      示例:
          var desc = Object.getOwnPropertyDescriptor(book , "year") ;
          console.log(desc.value , desc.configurable , typeof desc.get );
     
     
     
    注: 本页中 所有的 Object.defineXxxxx() 函数 必须在 IE9+ 使用(包含IE9);
     
     
     
     
  • 相关阅读:
    AutoCompleteTextView 和 TextWatcher 详解
    Activity 切换 动画
    ViewPager -- Fragment 切换卡顿 性能优化
    java Timer 使用小结
    Android_使用getIdentifier()获取资源Id
    Android_实现静默安装和卸载应用
    Android Studio导入第三方类库的方法
    BaseAdapter导致notifyDataSetChanged()无效的三个原因及处理方法
    NoSQL选型
    表设计
  • 原文地址:https://www.cnblogs.com/lmxxlm-123/p/11131855.html
Copyright © 2020-2023  润新知