面向对象

对象(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>

原文地址:https://www.cnblogs.com/wen936/p/7741685.html