zoukankan      html  css  js  c++  java
  • 面向对象

    对象(object)
    一 js中对象:
                    内置对象:Math RegExp Date Array String Function ...
                   宿主对象: DOM BOM
                   自定义对象:


    二 原始数据类型:基本类型、引用类型
                   基本类型:number string null undefined boolean
                   引用类型:Object Math RegExp Date Array Function
                   基本包装类型:String Number Boolean
                   内存:堆、栈
                   基本类型的数据是存放在栈当中的
                   引用类型和基本包装类型是存放在堆当中的

                     ps:基本类型按值访问的,引用类型和基本包装类型是按址(指针)访问的

    三 对象(Object)
               一)定义:无序属性的集合
                          1 通过Object

                                var obj=new Object();

                  obj.name='小黑';
    obj.age=20;
    obj.info=function(){
    console.log(this.name+'----'+this.age);
    };
    obj.info();


                          2 对象字面量               

                         var obj={
                          name:'小黑',
                          age:20,
                          info:function(){
                          console.log(this.name+'----'+this.age);
                                        }
                       };
                             obj.info();


    二)属性的分类
              1 数据属性
                          [[configurable]]:表示能否使用delete操作符删除从而重新定义,或能否修改为访问器属性。默认为true;
                          [[enumberable]]:表示是否可以在 for...in 循环和 Object.keys() 中被枚举。默认true;

                           

                          <script>
                                     //定义对象--对象字面量(通过键值对的方式)
                                     /*
                                     1 属性和属性值是用键值对的方便表达
                                     2 函数里面的this指向的是obj
                                 */
                                      var obj={
                                                  name:'小黑',
                                                  age:20,
                                                  info:function(){
                                                      console.log(this.name+'----'+this.age);
                                                 }
                                              };
                                              //删除对象的属性
                                              // delete obj.name;
                                               // obj.name=undefined;
                                                 // console.log(obj.name);
                                                Object.defineProperty(obj,'name',{
                                             configurable:false,
                                                   enumerable:false,
                                                 value:'花花'
                                           });
                                       delete obj.name;
                                        console.log(obj.name);
                                       for(var i in obj){
                                         console.log(i,obj[i]);
                                     }
                                   //返回对象的所有键名的集合
                                    var arr=Object.keys(obj);
                                      console.log(arr[0]);

                                    //属性的内部特性所设的值优先级要大于定义时属性值
                                     obj.name='小黑';
                                     console.log(obj.name);

                                   </script>

                          [[writable]]:表示是否可修改属性的值。默认true;
                         [[value]]:包含该属性的数据值。读取/写入都是该值。

              2 访问器属性
                            [[configurable]]:是否可通过delete操作符删除重新定义属性;
                         [[enumberable]]:是否可通过for-in循环查找该属性;
                        [[set]]:写入(设置)属性时调用函数,默认:undefined;一旦属性被访问读取,此方法被自动调用。
                        [[get]]:读取(获取)属性时调用函数,默认:undefined;一旦属性被重新赋值,此方法被自动调用。

                                  <script>

                                 //定义对象--对象字面量(通过键值对的方式)
                                      /*
    1 属性和属性值是用键值对的方便表达

                                         2 函数里面的this指向的是obj*/
                                    var obj={
                                         name:'小黑',
                                         age:20,
                                       info:function(){
                                        console.log(this.name+'----'+this.age);
                                       }
                                  };
                              var temp='';
                              Object.defineProperty(obj,'name',{
                              configurable:false,
                              enumerable:false,
                                //设置时可以通过注入形参的方式来拿到你设置的值
                               set:function(v){
                                  console.log(v);
                                 temp=v;
                                 console.error('我被设置了,这是一个非法操作');
                              },
                             //获取时不能通过注入形参方式拿到你所设置的值
                           get:function(){
                              return temp;
                            console.log('我被使用了');
                              }
                        });
                               obj.name='花花1';
                          //
                                 console.log(obj.name);
                                   </script>

  • 相关阅读:
    路由器配置深入浅出—静态路由和缺省路由配置
    盘点飞思卡尔i.MX多媒体处理器前世今生 (转)
    ubuntu18.04下取消中键复制粘贴功能
    uboot常用命令及其使用
    MCU软件最佳实践——使用printf打印数据
    uboot无法通过nfs加载ubuntu18.04中的文件(转)
    GNU C字节对齐__attribute__((aligned(n))) #pragma pack(n)
    ENDIAN的由来及BIGEDIAN 和LITTLEENDIAN(转)
    自动生成c# Model属性
    使用JAVA生成随机的AES密钥
  • 原文地址:https://www.cnblogs.com/wen936/p/7741685.html
Copyright © 2011-2022 走看看