除字符串、数字、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