字符串、数字、true、false、null和undefined之外,javascript的值都是对象

一、对象的分类:

           1. 原生对象:

                                   Object、Function、Array、String、Boolean、Number、Date、RegExp、

                                   Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URLError

            2.宿主对象:非javascript定义的对象,是由javascript寄宿的环境定义

                               Window、Document、History、Location、Screen、Navigator、Body、Form、Event

二、对象的常见用法是:

     创建create、设置set、查找query、删除delete、检测test、枚举enumerate

 对象的基本操作:创建对象  引用对象   销毁对象

1、创建对象

           1.1使用构造函数创建对象

   

var o=new Object();  //创建一个空对象(不包含任何属性和方法的空对象)
             var o=new Array(); //空的数组对象(继承数组的属性和方法)
             var o=new MyClass();//自定义对象

            1.2使用直接量创建对象

         

var o={};//创建的空对象直接量
             var o={x:1,y:false,name:'zhang',add:'shenzhen'}//创建包含数据的对象直接量

 2.引用对象:存储在变量中的值只是引用对象的地址,而不是对象本身

     

o={x:1,y:true}
              o1=o;
             alert(delete o);//删除变量o,返回true
             alert(o1.x);//1,说明对象依然在
              alert(o.x);//提示没有定义对象

   3.销毁对象:javascript自动回收无用的存储单元,对象没有被任何变量引用,则处于废除状态,相当于o=null(对于不用的对象可习惯这样写成这样,将对象废弃节省空间)

     

var  o={x:1,y:true}
        o=null;//定义对象引用变量为null,即废除对象
         alert(o.x);//提示系统错误,找不到对象

  属性基本操作:定义属性、访问属性、赋值和删除属性

1.定义属性

结构体内定义属性: 3层嵌套对象结构(虽然包含不同属性名y,但属于不同的作用域,因此不会冲突)

 

var o={//一级对象
                x:1,
                y:{//二级对象
                      x:3,
                      y:{//三级对象
                            x:3,
                             y:false
                    }}}

结构体外定义属性:

         

var o={};
                 o.x=1;
                  o.y={
                         x:2,
                         y:true
                      }

构造函数定义属性

       

var o=function(){
              this.x=1;
                 this.y={                   
                          x:1,
                         y:true
                  }
               }

     2.访问属性:

 

alert(o.y.y.y)//若读取 属性不存在,不会抛异常,返回undefined
             alert(o["y"]["y"]["y"])
             for(var i in o){alert(o[i])}//使用数组操作方式读取属性,属性没有固定显示顺序,同时也只能够枚举自定义的属性

     3.赋值和删除属性

         

var o={x:1,y:2}
                o.x=2;
                o["y"]=1;
               delete o.x;

          4.对象的方法:本质是一种值为函数的属性

              4.1结构体内定义-

var o={x:function(){alert(this.y)}}//--this访问当前对象的属性y的值
                o.x(); //undefined
                var f=o;
                  f.y=2; f.x();//2
              4.2结构体外定义-
 var o={}   o.x=function(a){return 10*a;}
                var f=o.x(5);alert(f);//50

         4.3构造方法

           4.3.1

function who(){alert(this.name)}//定义一个抽象方法
      var  o=new Object();
           o.name="o";
           o.who=who;//绑定抽象方法
       var f=new Object();
           f.name="f";
           f.who=who;//绑定抽象方法
  o.who();//"o"
            f.who();//"f"

     4.3.2

 

function f(){return this.x+this.y}
         function MyClass(x,y){this.x=x;this.y=y;this.add=f}
         var o=new MyClass(10,20);
         alert(o.add())//30