JavaScript中的对象

来源:互联网 发布:课程表数据库设计 编辑:程序博客网 时间:2024/06/07 20:55

在JavaScript中,对象可以看做是由若干个属性组成的无序集合。
JavaScript对象是动态的,可以动态地新增或删除属性。
我们通过对象的引用来操作对象。

obj ={a:'a',b:'b',c:12};var obj2 = obj;//两个引用同时指向一个对象obj2.a = 'a2';console.log(obj.a);

上面的代码输出的是a2,也就意味着,两个引用同时指向一个对象后,一个引用修改了对象的值,则使用另一个引用会受到影响,因为他们指向的是同一个对象实例。

对象的创建

我们通常通过对象直接量的方式来创建对象,例如

obj ={    a:'a',    b:'b',    c:12,    func1 : function(){}    };

obj就是一个对象,包含a,b,c这三个属性和func1这个方法。

另外可以通过new关键字来创建对象,例如

var d = new Date();     var a = new Array();var r = new RegExp('[0-9]')

查询和设置对象的属性

我们可以通过.或[]的方式来获取或设置对象的属性值

//两种方式读取属性值var a = obj.a ;var a = obj['a'];//两种方式设置属性值obj.a = 'abc';obj['a'] = 'abc';

用.的方式比较常见,但[]的方式功能更强大,因为[]之间可以是任意的字符串(含’-‘等不能作为标识符的字符),甚至可以是一个表达式

obj['book-title'] = 'JavaScript权威指南';var str = '-title';obj['book'+str] = 'JavaScript权威指南';

总之,[]的方式支持的场景更多!

删除属性和检测属性

JavaScript通过delete来删除一个对象的属性,通过in来检测某对象是否包含一个属性

obj ={a:'a',b:'b',c:12};'a' in obj      //检测属性,此处返回truedelete obj.a    //删除属性a'a' in obj      //再次检测属性,此处返回false

枚举属性(遍历属性)

我们可以通过for…in的语法来遍历一个对象的所有属性

obj ={a:'a',b:'b',c:12};for(attr in obj){    //attr是属性名,obj[attr]是属性值    console.log(attr+'='+obj[attr] );}

下面我们来写一个简单的extend函数,该函数用来扩展一个对象的属性

function extend(o , p){    for(attr in p){        o[attr] = p[attr];    }    return o;}
obj2 = {m : 'm' , n : 'n'};     //再定义一个对象,包含m,n属性obj = extend(obj,obj2)          //调用extend方法,扩展obj对象,使其拥有m,n属性console.log(obj.m);             //获取obj对象的m属性值

getter方法和setter方法

没错,JavaScript也可以定义getter方法和setter方法,通过对象直接量来定义的方式如下:

var obj = {    a : 'a' ,    get b(){        console.log('b is called');        return 'b';    },    set b(newValue){        console.log('b is setted');        this.a = newValue;    }};

接下来,我们可以像对待数据属性一样来对待b,区别就是,获取或设置值时,对应的getter或setter方法会被调用(不需要关心setter方法的返回值)

var b = obj.b       //getter方法会被调用obj.b = 'b'         //setter方法会被调用

对象序列化

对象序列化是指,将对象的状态转换为字符串,对象反序列化是指,将字符串转换为对象。我们使用JSON.stringify()方法来序列化对象,使用JSON.parse()方法来反序列化对象。

obj ={a : 'a' , b : 'b' , c : 12 };var str =JSON.stringify(obj);       //序列化对象,返回{"a":"a","b":"b","c":12}var o = JSON.parse(str)             //反序列化对象,返回一个对象
0 0
原创粉丝点击